gpt4 book ai didi

javascript - 从 else 内部访问函数级变量 while

转载 作者:行者123 更新时间:2023-11-30 12:26:13 24 4
gpt4 key购买 nike

使用 node.js,我试图从 do while 循环中的 else 语句中访问我在函数开头声明的变量:

function myFunction(){
var limit = 2000;
var count;
var total;
var runningTotal = 0;
var url = 'http://example.com';
var self = this;

do{
request({'url': url}, function (error, response, body) {
if(error)logger.error(error);
else{
count = JSON.parse(body).count;
console.log('count = ' + count);
total = JSON.parse(body).total;
console.log('total = ' + total);
runningTotal+=count;
console.log('running total = ' + runningTotal);
var parsedBody = JSON.parse(body);
self.parseResults(parsedBody.rows);
}
});
} while(total > runningTotal);
}

当我运行这段代码时,count、total 和 running total 都被正确地注销了,但是函数级别的 count、total 和 running total 变量是未定义的,所以 while 只运行一次。这是为什么,我如何从 else 中更新这些变量?

最佳答案

循环内的 request 回调是异步的,因此您要等到循环完成后才能看到请求的结果。您需要重新组织代码以处理异步,大致如下:

function myFunction(){
var limit = 2000;
var count;
var total;
var runningTotal = 0;
var url = 'http://example.com';
var self = this;

doRequest();

function doRequest() {
request({'url': url}, function (error, response, body) {
if(error)logger.error(error);
else{
count = JSON.parse(body).count;
console.log('count = ' + count);
total = JSON.parse(body).total;
console.log('total = ' + total);
runningTotal+=count;
console.log('running total = ' + runningTotal);
var parsedBody = JSON.parse(body);
self.parseResults(parsedBody.rows);

if (total > runningTotal) {
doRequest();
}
}
});
}
}

另请注意,myFunction 将在来自 request 的任何回调发生之前返回。

关于javascript - 从 else 内部访问函数级变量 while,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29276796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com