ReduxとRedux-Sagaを使用する ECMA-2015-App (具体的には React Native) では、次のようなコードを常に大量に使用しています (これは正常に動作し、ここでは実際の問題ではありません)。
const stats = yield call([dataStorage, dataStorage.loadPrefetchingStats], languageId);
yield put({type: ACTIONS.R_SYNCHRONIZE_STATE_PROGRESS, payload: {max: statsUnfetched, value: statsFetched}});
try {
yield importRecord(languageId, record, dataStorage)
}
catch(err) {
console.log("ERROR: ", err)
yield put({type: ACTIONS.R_SYNCHRONIZE_STATE_ERROR, payload: err});
return false;
}
ここで短い質問: コールバック関数内で async 関数と yield-constructs を組み合わせる可能性はありますか?
より長い質問:
ユーザーのデバイスでローカルの sqlite-database を操作するには、この素晴らしいライブラリreact-native-sqlite-storageを使用します。
複数の SQL ステートメントをトランザクション内にカプセル化するには、次のようにコールバックが必要です。
this.db.transaction((tx) => {
var sql = `UPDATE product SET prefetched=?, error_prefetching=0 WHERE id=?`;
return tx.executeSql(sql, [
product.prefetched,
product.id
], (tx, results) => {
}, (a, b) => {
console.log('ERROR', a,b);
}) ;
});
これらすべてのステートメントが大きな単一のトランザクション内にカプセル化されている場合、多数の INSERT または UPDATE で sqlite を高速化することはよく知られており、ベスト プラクティスです。
しかし、多くの "yield" ステートメントで redux を使用してビジネス ロジックと UI 更新の間で通信しているため、現在問題が発生しています。
誰かがここにアイデアを持っていますか?