您的问题不在于承诺,而在于您对的使用async
。
async.each(items, handler, finalCallback)
适用handler
于items
数组的每个项目。该handler
函数是异步的,即传递给回调函数,该函数必须在完成工作后调用。完成所有处理程序后,将调用最终回调。
这是解决当前问题的方法:
var handler = function (item, cb) {
saveItem(item)
.then(
function () { // all is well!
cb();
},
function (err) { // something bad happened!
cb(err);
}
);
}
var finalCallback = function (err, results) {
// ...
}
async.each(items, handler, finalCallback);
但是,您无需使用async
此特定代码段:仅使用promises就可以很好地完成此工作,尤其是使用Q.all()
:
// Create an array of promises
var promises = items.map(saveItem);
// Wait for all promises to be resolved
Q.all(promises)
.then(
function () { // all is well!
cb();
},
function (err) { // something bad happened!
cb(err);
}
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句