gpt4 book ai didi

javascript - 打破 Node.js/Express.Js 中的无限循环

转载 作者:行者123 更新时间:2023-12-03 04:08:50 24 4
gpt4 key购买 nike

我创建了一个 Express 应用程序,该应用程序应该通过外部 API 调用进行分页。我已经从各个方面研究过这个问题,但我无法弄清楚为什么该函数没有触发打破循环的条件。任何帮助,将不胜感激!

看起来我无法从调用 makeRequest 函数的最后一个循环中中断。无限循环的证据是请求回调中的第一个 console.log,“我正在发出请求”。我在回调函数中还有更多的 console.logs,它们也应该总是返回一些东西,但它似乎甚至没有到达这些。

app.post("/api/example", function(req, res) {
var username = username;
var password = password;
var container = [];
var counter = 0;
var keepGoing = true;

var makeRequest = function() {
console.log("I'm making a request");
var URL = "https://fakeapiurl.com/&page=" + counter;
request.get(URL, {
'auth': {
'user': username,
'pass': password,
'sendImmediately': true
},
'content-type': 'application/json'
}, function(error, response, data) {
var results = JSON.parse(data);
var examples = results.examples;
var numOfExamples = results.numResults;
console.log(numOfExamples);

if ((numOfExamples === 0) || (numOfExamples === jobsContainer.length - 1)) {
counter = 5;
keepGoing = false;
} else {
counter++;
for (var i = 0; i < examples.length; i++) {
container.push(examples[i]);
}
}

if (counter === 5) {
keepGoing = false;
container.sort(function(a, b) {
etc.
});

res.send(container);
}
});// end of request call
};// end of makeRequest function

while (keepGoing === true) {
makeRequest();
}

});// end of app post

最佳答案

这永远不会像您期望的那样工作,您将在同步 while 循环内触发异步请求。因此,当第一个请求尝试获取数据时,您会再次触发相同的请求,因此您的第一个请求会被取消。这就像永远一样。您应该在上一个请求的成功回调中触发下一个请求,以便在上一个请求解析后触发下一个请求。

类似的事情:

app.post("/api/example", function(req, res) {
var username = username;
var password = password;
var container = [];
var maxPages = 5;
var makeRequest = function(page) {
console.log("I'm making a request");
var URL = "https://fakeapiurl.com/&page=" + page;
request.get(URL, {
'auth': {
'user': username,
'pass': password,
'sendImmediately': true
},
'content-type': 'application/json'
}, function(error, response, data) {
var results = JSON.parse(data);
var examples = results.examples || [];
var numOfExamples = results.numResults;
var lastPageReached = (numOfExamples === 0 || numOfExamples === jobsContainer.length - 1);
lastPageReached = lastPageReached && page < maxPages;

if (lastPageReached) {
container.sort(function(a, b) {
etc.
});
res.send(container);
} else {
container = container.concat(...examples);
makeRequest(page + 1);
}
});
};
makeRequest(0);
});

关于javascript - 打破 Node.js/Express.Js 中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44423995/

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