我不明白为什么您需要实施主动轮询来检查密钥是否存在(有更好的方法来处理这种情况),但我会尝试回答这个问题。
您根本不应该使用 while 循环(在函数内部或外部)。由于 node.js 的异步特性,这些循环最好使用尾递归来实现。这是一个例子:
var redis = require('redis')
var rc = redis.createClient(6379, 'localhost');
function wait_for_key( key, callback ) {
rc.get( key, function(err,result) {
if ( result == null ) {
console.log( "waiting ..." )
setTimeout( function() {
wait_for_key(key,callback);
}, 100 );
} else {
callback(key,result);
}
});
}
wait_for_key( "xPQ", function(key,value) {
console.log( key+" exists and its value is: "+value )
});
有多种方法可以使用专用库(使用延续传递样式或纤维)来简化这些表达式。例如,您可能想要检查 async.js 包的 while 和 until 函数。
https://github.com/caolan/async