dzm*_*dzm 6 asynchronous node.js node-async q
这是我的代码示例:
async.each(items, cb, function(item) {
saveItem.then(function(doc) {
cb();
});
}, function() {
});
Run Code Online (Sandbox Code Playgroud)
saveItem是一个承诺.当我运行这个时,我总是得到cb is undefined,我猜then()是没有访问权限.任何想法如何解决这个问题?
Pau*_*gel 20
你的问题不在于承诺,而在于你的使用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);
Run Code Online (Sandbox Code Playgroud)
但是,您不需要使用async这段特殊代码:仅凭承诺就可以很好地完成这项工作,尤其是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);
}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7458 次 |
| 最近记录: |