我想在地图中的每个循环内部进行查询,然后一旦完成循环,查询就会执行其他操作:
Promise.map(results, function (item, index) {
return Clubs.findAsync({name: name})
.then(function (err, info) {
if (err) {console.info(err); return err};
console.info(info);
return info;
})
.done(function (info) {
return info;
});
}).done(function (data) {
console.info('done');
req.flash('success', 'Results Updated');
res.redirect('/admin/games/'+selectedLeague);
});
在此,done
将在info
被安慰之前进行控制。这意味着我无法对数据做任何事情。
答案 0 :(得分:2)
.done([Function fulfilledHandler] [,Function rejectedHandler]) - > 空隙
喜欢.then(),但任何未经处理的拒绝都会在这里结束 抛出为错误。请注意,通常蓝鸟足够聪明 弄清楚未经处理的拒绝。所以很少 需要。如错误管理部分所述,使用.done是 更多关于Bluebird的编码风格选择,并且用于明确 标志着承诺链的终结。
因此,在Promise.map
中,它只会获得undefined
或其他内容的数组,而不是Promise
,因此地图在获取地图后会得到解析。使用.then
返回Promise
。
Promise.map(results, function (item, index) {
return Clubs.findAsync({name: name})
.then(function (err, info) {
if (err) {console.info(err); return err};
console.info(info);
return info;
})
// vvvv use `.then` here, not `.done`, done returns nothing, not promise.
.then(function (info) {
return info;
});
}).done(function (data) {
console.info('done');
req.flash('success', 'Results Updated');
res.redirect('/admin/games/'+selectedLeague);
});