在 nodejs 上循环 redis 返回的承诺
Loop a promise returned by redis on nodejs
我正在尝试在 for 循环中使用 promise。
我觉得是时候让我第一次使用 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);
})
}
})
我的目标是计算所有 "result" 个排序集并将每个结果放入另一个名为 en:230:top 的排序集
这将包含分数的计数结果和值的 1,2,5,10,3,75。
目前,我只是想遍历所有 "result" 并计数。
谁能帮帮我?
编辑:
我从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);
})
您可以使用 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
});
我正在尝试在 for 循环中使用 promise。 我觉得是时候让我第一次使用 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);
})
}
})
我的目标是计算所有 "result" 个排序集并将每个结果放入另一个名为 en:230:top 的排序集 这将包含分数的计数结果和值的 1,2,5,10,3,75。
目前,我只是想遍历所有 "result" 并计数。
谁能帮帮我?
编辑:
我从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);
})
您可以使用 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
});