一尘不染

等待所有答应与bluebird在nodejs中完成

redis

等待蓝鸟在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返回的消息吗?我在这里想念什么?


阅读 348

收藏
2020-06-20

共1个答案

一尘不染

.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)

2020-06-20