gpt4 book ai didi

javascript - ECMA 2015 : how to use async functions with "yield" in a callback-routine?

转载 作者:行者123 更新时间:2023-12-03 06:23:41 26 4
gpt4 key购买 nike

在 ECMA-2015-App(具体:React Native)中使用 ReduxRedux-Saga我们经常大量使用这样的代码(它工作正常,并不是这里真正的问题):

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结构?

较长的问题:

为了在用户设备上使用本地 sqlite 数据库,我们使用这个很棒的库 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 更新之间进行通信,所以我们现在遇到了问题。

这里有人有想法吗?

最佳答案

无法处理生成器中的回调。更好的方法是Promisify你的回调,然后你可以使用yields来处理promise。

考虑一个如下所示的函数:

function doSomething(data,callback) {
...
...
callback();
}

如果你 promise :

function promisedDoSomething(data) {
return new Promise( (resolve) => {
doSomething(data, resolve);
}
}

现在您可以在生成器中使用这个 Promisified 函数,只需将其与 yield 一起使用即可。

var response = yield promisifiedDoSomething(data);

关于javascript - ECMA 2015 : how to use async functions with "yield" in a callback-routine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38746282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com