дождитесь всех обещаний закончить в нодейсе с синей птицей


Как лучше всего ждать, пока все обещания закончатся в nodejs с bluebird? Допустим, я хочу выбрать записи из базы данных и сохранить их в 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, кроме консоли.журнал показывает пустой массив. Не должен ли он содержать массив "OK", поскольку это сообщение redis возвращает после выполнения обещания? Чего мне здесь не хватает?

1 3

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)