【发布时间】:2016-10-21 04:44:22
【问题描述】:
我正在节点中构建这个函数,它混合了查询数据库和异步的承诺。 问题是 async.each 函数永远不会停止。 promise2 函数永远不会被触发。 这是我的代码中的问题还是不能将 async.each 函数与 Promise 混合? 有没有更好的方法来编写我想做的代码?
非常感谢您的帮助
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)
})
【问题讨论】:
-
如果你使用 Promise,你不需要 async,看看 bluebird.js bluebirdjs.com/docs/api/promise.each.html
-
这看起来很糟糕。你违背了承诺的意义。
-
@JLRishe,你能帮我以更好的方式重写这段代码吗?我不明白 bluebird.js 上给出的示例我认为 promise.each 与我的情况无关。
-
永远不要将
async库与 promise 一起使用。
标签: javascript node.js asynchronous promise bluebird