如何从NodeJS中的对象获取随机隔离值?我如何知道请求是否以及何时满足?我的意思是不这样做:
http.createServer(function(request, response) {
var obj = [];
ref("games").child(rnd(range)).once("value").then(function(snapshot) {
obj.push(snapshot.val());
}).then(function() {
ref("games").child(rnd(range)).once("value").then(function(snapshot) {
obj.push(snapshot.val());
}).then(function() {
ref("games").child(rnd(range)).once("value").then(function(snapshot) {
obj.push(snapshot.val());
}).then(function() {
ref("games").child(rnd(range)).once("value").then(function(snapshot) {
obj.push(snapshot.val());
}).then(function() {
ref("games").child(rnd(range)).once("value").then(function(snapshot) {
obj.push(snapshot.val());
}).then(function() {
ref("games").child(rnd(range)).once("value").then(function(snapshot) {
obj.push(snapshot.val());
}).then(function() {
response.end(JSON.stringify(obj));
});
});
});
});
});
});
}).listen(8081);
我似乎无法获得递归代码,因为我对此很新,并且有太多数据在移动。
答案 0 :(得分:1)
按顺序执行每个请求可能不是最好的方法;在开始下一个之前没有理由等待最后一个完成。当然,诀窍是知道最后一个请求何时完成。我通常只是使用一个计数器:
function getSomeStuff(numToGet, callback) {
var obj = []; // accumulates the results
var numDone = 0; // keeps track of how many of the requests have completed
for (var n=0; n<numToGet; n++) {
ref("games").child(rnd(range)).once("value", function(snapshot) {
// NOTE: inside this function, n will always ==numToGet!
obj.push(snapshot.val());
if (++numDone == numToGet) { // if this is the last request to complete,
callback(obj); // call the callback with the results
}
});
}
}
然后在http
处理程序中,只需:
getSomeStuff(6, function(obj) {
response.end(JSON.stringify(obj));
});