Node.js,在继续执行之前等待所有的Redis查询完成

我需要通过一系列值,在Redis中查找date(看是否存在),然后继续。 例如:

var to_check = [ 1, 2, 3 ] var found_elements = [] for (var i = 0; i < to_check.length; i++) { redis.EXISTS('namespace:' + to_check.length[i], function(err, value) { if (!err && value) { found_elements.push(to_check.length[i]) } }) } console.log(found_elements.join(', ')) 

在所有发送给Redis的callback都被执行之后,我需要执行最后一行。 什么是最好的方法来解决这个问题?

使用Promise处理复杂的asynchronous操作。 并行执行就是其中之一。

 var to_check = [ 1, 2, 3 ]; var found_elements = []; Promise.all(to_check.map(function(item){ return new Promise(function(resolve,reject){ redis.EXISTS('namespace:' + item, function(err, value) { if(err){ return reject(err); } if (value) { found_elements.push(item); } resolve(); }) }); })).then(function(){ console.log('All operations are done'); }).catch(function(err){ console.log(err); }); 

我相信还有其他的方法。 但是,这应该工作(未testing):

 var to_check = [ 1, 2, 3 ] var found_elements = [] for (var i = 0; i < to_check.length; i++) { (function(i){ redis.EXISTS('namespace:' + to_check.length[i], function(err, value) { if (!err && value) { found_elements.push(to_check.length[i]) } if(i == (to_check.length-1)){ console.log(found_elements.join(', ')) } }) })(i); }