【发布时间】:2016-08-23 17:25:46
【问题描述】:
我有一个文件名数组,我使用这个节点的异步模块进行迭代。
async.eachSeries(imageStore, function(imageDetails,callback){
mongoMan.updateCollection('imageStore',imageDetails,{_id: imageDetails.fileName}).then(function(res){
return callback(null, res);
}).catch(function(err){
logger.error(err);
return callback(err);
});
},function(err){
callback(null);
});
updateCollection()函数是这样的:
exports.updateCollection = function(collection, values, condArr){
var result = imageStores.updateAsync(condArr, values, { upsert: true }).then(function(res){
return new Promise.resolve(res);
}).catch(function(err){
logger.error(err);
});
return new Promise.resolve(result);
}
此代码运行良好,可更新数据库和所有内容。但我仍然无法解决蓝鸟抛出的警告:
Warning: a promise was created in a handler but was not returned from it
at Object.exports.updateCollection (/home/swateek/Documents/codebase/poc/apps/webapp/server/components/mongodb/mongoConn.js:46:22)
at /home/swateek/Documents/codebase/poc/apps/webapp/server/components/imageStore.js:72:24
at /home/swateek/Documents/codebase/poc/apps/webapp/node_modules/async/lib/async.js:181:20
at iterate (/home/swateek/Documents/codebase/poc/apps/webapp/node_modules/async/lib/async.js:262:13)
已查找解决方案here,但在我的情况下这还不够令人信服。至少有办法关闭警告吗?
更新
请检查下面的正确答案,这是我的调用函数的样子:
function(callback){// post imageStore data to DB
async.eachSeries(imageStore, function(imageDetails,callback){
mongoMan.updateCollection('imageStore',imageDetails,{_id: imageDetails.fileName}).catch(function(err){
logger.error(err);
return callback(err);
});
return callback(null);
},function(err){
callback(null);
});
}
【问题讨论】:
-
不要将
async.js与承诺一起使用! -
@Bergi 我会遇到这个问题吗?我都是新手,请指教?
-
是的,你会的,诸如此类的问题。而且处理错误会变得更加复杂,
return在适当的地方承诺,如果你将它们与节点样式的回调混合,则可以轻松地链接承诺。只是不要。 Bluebird 在其工具套件中拥有您需要的一切。在您的情况下,Promise.each或Promise.mapSeries。
标签: node.js promise bluebird async.js