【发布时间】:2015-10-12 20:50:53
【问题描述】:
所以我有带有一些帮助服务的sails 应用程序,可以更轻松地创建和获取复杂的模型。 其中一项是
getMerits: function(profileId, limit){
return async.waterfall([
function(callback){
Merit.find({employeeProfile: profileId}).then(function(merits){
callback(null, merits);
});
},
function(merits, callback){
async.forEach(merits, function(item, loop_callback){
MeritIndex.findOne({id: item.index}).then(function(meritIndex){
merits[merits.indexOf(item)].index = meritIndex;
loop_callback();
});
}, function(err, results){
callback(null, merits);
});
}
], function(err, results){
return results;
});
}
问题是当我尝试调用此函数来获取结果时(插入了它们的优点索引的优点列表。)我无法找出从异步瀑布返回结果的正确方法:
async.forEach(profiles, function(item, loop_callback){
MeritService.getMerits(item.id, 5).exec(function(err, merits){
console.log(merits)
profiles[profiles.indexOf(item)].merits = merits;
loop_callback();
});
// MeritService.getMerits(item.id, 5).exec(function(m){
// console.log(m)
// profiles[profiles.indexOf(item)].merits = m;
// loop_callback();
// });
}, function(err){
console.log("PROFILES" + JSON.stringify(profiles))
});
这里的优点打印结果未定义。有没有办法将异步瀑布视为一个承诺并使用 then 而不是 exec?
【问题讨论】:
标签: node.js asynchronous sails.js waterline