在ECMA-2015应用内(具体:阵营母语)使用Redux和Redux-Saga我们有这样的代码不断庞大的使用量(工作正常,这里是不是真正的问题):ECMA 2015:如何在回调例程中使用带有“yield”的异步函数?
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;
}
短问题在这里:是否有 - 但是 - 在回调函数中结合异步函数和yield-constructs的任何可能性?
较长的问题:
要与我们使用这个梦幻般的图书馆react-native-sqlite-storage用户设备上的本地SQLite数据库工作。
要在事务内封装多个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的时候被封装所有这些语句在一个大的单一交易中。
但是由于我们正在使用Reduce和许多“yield”语句在业务逻辑和UI-Updates之间进行通信,现在我们遇到了一个问题。
有人在这里有一个想法吗?
*“但不幸的是,它不能用于回调函数。”*这是不正确的。 'yield'只能用于发电机。所以如果回调函数是一个生成器,你可以使用它。看来你的问题是如何将使用回调的“传统”异步函数与redux-saga结合起来。 –
我在想Felix Kling说的同样的东西。 AFAIK,产量用于发电机功能。你也可以尝试异步/等待 –
我认为你可以创建REDX-SAIG的频道,并且在你的回调中,不管它们的嵌套程度如何,你都可以将消息放入这个频道(或者不同的频道,因为没有匹配功能来自频道)。然后在你的传奇故事中,你可以从这个频道收到信息,就像你采取重做行动一样。传统回调方法中也不允许“等待” –