我在nodejs中使用Q库和异步库.
这是我的代码示例:
async.each(items, cb, function(item) { saveItem.then(function(doc) { cb(); }); }, function() { });
saveItem
是一个承诺.当我运行这个时,我总是得到cb is undefined
,我猜then()
是没有访问权限.任何想法如何解决这个问题?
你的问题不在于承诺,而在于你的使用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
这段特殊代码:仅凭承诺就可以很好地完成这项工作,尤其是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); } )