gpt4 book ai didi

javascript - 使用 Promises 等待嵌套的异步任务

转载 作者:行者123 更新时间:2023-11-30 10:09:37 25 4
gpt4 key购买 nike

我有类似这样的代码:

// Get the data via an AJAX call
fetchAjaxData()
.then(function(data) {
// Update or insert the data - cannot use a merge
data.forEach(function(item) {
updateTable(item)
.then(function(result)) {
// If no rows were updated, insert the item
if (result.rowsAffected == 0) {
insertIntoTable(item);
.then(function(result)) {
console.log("item added");
});
}
});
});
return data.length;
}).then(function(l) {
useInsertedItems(l);
});

问题是当 useInsertedItems 运行时,数据可能尚未插入或更新。我如何确保数据在此之前完全更新或插入?

最佳答案

Promises 通过返回值 表示完成,因此您应该返回您的updateIteminsertIntoTable 链。聚合 promise 是通过 Promise.all(或 $q.all、Q.all、$.when 等,具体取决于库)完成的:

更正后的代码将执行以下两项操作:

fetchAjaxData()
.then(function(data) {
// Update or insert the data - cannot use a merge
// map is like `each` with return values for each item
var ps = data.map(function(item) {
return updateTable(item)
.then(function(result)) {
// If no rows were updated, insert the item
if (result.rowsAffected == 0) {
return insertIntoTable(item); // note the return
.then(function(result)) {
console.log("item added");
});
}
});
});
return Promise.all(ps).then(function(){ return data.length; });
}).then(function(l) {
useInsertedItems(l);
});

关于javascript - 使用 Promises 等待嵌套的异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27250675/

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