gpt4 book ai didi

javascript - 使用 async.each 和 promises - async each 永远不会停止

转载 作者:行者123 更新时间:2023-11-30 11:48:32 26 4
gpt4 key购买 nike

我正在 Node 中构建此函数,它混合了查询数据库的 promise 和异步查询。问题是 async.each 函数永远不会停止。永远不会触发 promise2 函数。这是我的代码中的问题还是不能将 async.each 函数与 promises 混合使用?有没有更好的方法来编写我想做的事情?

非常感谢您的帮助

promise1().then(function(arr1){
async.each(arr1, function(obj1, callback) {
build_select_request(obj1).then(function(select_request){
query_database(select_request).then(function(result){
if (result){
build_update_request(obj1).then(function(update_request){
do_query(update_request).then(function(result){
callback(null)
}, function(error){
callback(error)
})
}, function(error){
callback(error)
})
} else {
build_insert_request(obj1).then(function(insert_request){
do_query(insert_request).then(function(result){
callback(null)
}, function(error){
callback(error)
})
}, function(error){
callback(error)
})
}
}, function(error){
callback(error)
})
}, function(error){
callback(error)
})
}, function(err) {
// if any of the file processing produced an error, err would equal that error
if (err) {
// One of the iterations produced an error.
// All processing will now stop.
reject(err)
} else {
promise2().then(function(success){
resolve(success)
}, function(error){
reject(error)
})
}
})
}, function(error){
reject(error)
})

最佳答案

Is it an issue in my code or cant an async.each function be mixed with promises?

可以,但不应该。编写 promise 代码然后回退到回调会产生您当前拥有的结果。

相反,确保使用正确的 promise 链:

var promise = build_select_request(obj1).then(function(select_request){
return query_database(select_request).then(function(result){
if (result){
return build_update_request(obj1).then(do_query);
/* .then(function(update_request){
return do_query(update_request);
}) */
} else {
return build_insert_request(obj1).then(do_query);
/* .then(function(insert_request){
do_query(insert_request)
}) */
}
})
})

您现在可以像这样将它与 async.each 一起使用:

async.each(arr1, function(obj1, callback) {
var promise = …;
promise.then(function(result) {
callback(null, result)
}, function(error) {
callback(error);
});
}, function(err) {

})

但你最好避免这种情况,而是使用 Promise.all这也可以让你避免 Promise constructor antipattern你爱上的(考虑到最外层回调中的 resolve/reject 调用):

promise1().then(function(arr1) {
return Promise.all(arr1.map(function(obj1) {
var promise = …;
return promise;
}));
}).then(function(results) {

}, function(err) {

});

关于javascript - 使用 async.each 和 promises - async each 永远不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40168576/

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