在使用 bluebird 的 Node.js 中等待所有 Promise 完成的最佳方法是什么?假设我想从数据库中选择记录并将它们存储在 redis 中。我想出了这个
loadActiveChannels: function() {
return Knex('game_channels as ch')
.where('ch.channel_state', '>', 0)
.then(function(channels) {
var promises = [];
for(var i=0; i<channels.length; i++) {
var promise = redis.hmsetAsync("channel:"+channels[i].channel_id, _.omit(channels[i], 'channel_id'))
promises.push[promise];
}
return Promise.all(promises);
}).then(function(res) {
console.log(res);
})
}
不确定它是否按我的预期工作。所有条目都在 redis 中,但 console.log 显示空数组。它不应该包含一个“OK”数组吗,因为它是redis在履行承诺后返回的消息?我在这里缺少什么?
.map
这里很方便:
loadActiveChannels: function() {
return Knex('game_channels as ch')
.where('ch.channel_state', '>', 0)
.map(function(channel) {
return redis.hmsetAsync("channel:"+channel.channel_id, _.omit(channel, 'channel_id'))
}).then(function(res) {
console.log(res);
})
}
您的原始代码没有得到任何输出的原因是因为您有promises.push[promise];
本来应该是promises.push(promise)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)