等待蓝鸟在nodejs中完成所有承诺的最佳方法是什么?可以说我想从数据库中选择记录并将其存储在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 在这里很方便:
.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)
promises.push[promise];
promises.push(promise)