Зациклите обещание, возвращаемое redis на nodejs
Я пытаюсь использовать обещание в цикле for. Я чувствую, что пришло время впервые использовать Promise.all, но я не могу заставить его работать.
Вот что у меня так далеко:
redis.keys('en:230:*')
.then(function(result) {
// result = ['en:230.1', 'en:230.2', 'en:230.5', 'en:230.10', 'en:230.3', 'en:230.75']
for (var k = 0; k < result.length; ++k) {
redis.zcount(result[k])
.then(function(r) {
console.log(r);
})
}
})
Моя цель - подсчитать все отсортированные по "результату" наборы и поместить каждый результат в другой отсортированный набор с именем en:230:top. Он будет содержать результат подсчета для оценки и 1,2,5,10,3,75 для значения.
В настоящее время я только пытаюсь перебрать все "результат" и посчитать.
Кто-нибудь может мне помочь?
Редактировать:
Что я понял из Promise.all, так это следующее. Должно ли что-то подобное работать?
var array = [];
redis.keys('en:230:*')
.then(function(result) {
// result = ['en:230.1', 'en:230.2', 'en:230.5', 'en:230.10', 'en:230.3', 'en:230.75']
for (var k = 0; k < result.length; ++k) {
array.push(redis.zcount(result[k]));
}
return Promise.all(array);
})
.then(function(r) {
console.log(r);
})
1 ответ
Решение
Вы можете использовать Promise.all:
redis.keys('en:230:*')
.then(function (results) {
// collect individual promises in an array
var queries = results.map(function (r) {
return redis.zcount(r);
});
// return a promise that resolves when all of query promises resolve
return Promise.all(queries);
})
.then(function (counts) {
// do something with counts
})
.catch(function(err){
// oops
});