首先,我没有异步编程的经验,所以如果我错过了一些明显的东西,我很抱歉。
我看到这个问题突然出现了。我知道人们不喜欢在Javascript中强制同步,但在这种情况下是必要的。我正在对生产数据库进行大量调用,因为生成数据库的使用频率太高而无法承担过多的负担。因此,我在循环中设置我的代码以发出请求,等待确认它已完成,睡眠2秒,然后发出下一个请求。这是因为我将在大约10-20分钟的时间内每周从该服务器中提取大量数据。
这是我的代码。 Sleep是一个强制程序使用Date类等待的函数。
var thread = function(cb){
cb();
};
do{
var x = thread(function(){
request.post(options, function(e, r, body){
console.log(e);
console.log(r.statusCode);
issues.push(body["issues"]);
maxResults = body["total"];
options.body.startAt += 25;
console.log("Going to sleep");
});
sleep(2000);
});
console.log("Waking up and moving to the next cycle");
}while(issues.length < maxResults);
console.log("Finished with the requests");
}
虽然我设置了回调,但我的代码仍然是异步运行请求。因为我将maxResults保留为null,很明显我的回调不起作用。这是我的输出:
Waking up and moving to the next cycle
Finished with the requests
Going to sleep
答案 0 :(得分:1)
您需要创建一个递归异步函数。
它看起来像这样:
function fetch(existingIssues) {
return sendRequest().then(function() {
existingIssues.push(...);
if (existingIssues.length >= maxResults)
return existingIssues;
else
return fetch(existingIssues);
});
}
fetch([]).then(...);