gpt4 book ai didi

javascript - 如何在 node.js 中异步执行多个 REST API 请求?

转载 作者:行者123 更新时间:2023-11-30 17:38:45 25 4
gpt4 key购买 nike

我想做的是执行多个远程 REST API 请求,我希望每个请求按顺序一个接一个地完成。我读到 async.js 是执行此操作的方法。

因为我不知道我必须执行多少次请求,所以我使用 async.whilst() .我的想法是,一旦 API 返回零帖子,我将停止请求。到目前为止,这是我的代码(出于测试目的,我将循环限制为仅运行 5 次)。

var request = require('request');
var async = require('async');

var APIKEY = 'api-key-here';

var i = 0;
var continueWhilst = true;
async.whilst(
function test() { return continueWhilst; },
doThisEveryTime,
function (err) {
// Done
}
);

function doThisEveryTime(next) {

reqURL = 'http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=' + APIKEY + '&offset=' + i*20;

request(
reqURL,
function (err, resp, body) {
if(!err && resp.statusCode == 200) {
var resultAsJSON = JSON.parse(body);
console.log(reqURL);
console.log("Request #" + i + " done");
}
});

i++;
if (i===5) {
continueWhilst = false;
}
console.log("Iterating, i= " + i);
next();
}

测试输出是这样的:

Iterating, i= 1
Iterating, i= 2
Iterating, i= 3
Iterating, i= 4
Iterating, i= 5
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done

request方法不知何故只考虑了最后的 i值为 80。我做错了什么,我该如何解决?

最佳答案

出现此问题是因为您的 reqURL 变量没有 var,并且不属于 doThisEveryTime 范围。您还一次发出了所有请求,因为在调用 next 之前您没有等待请​​求完成。这两件事导致请求使用相同的 URL 同时发生五次。尝试以下操作:

function doThisEveryTime(next) {
var reqURL = 'http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=' + APIKEY + '&offset=' + i*20;

request(reqURL, function (err, resp, body) {
if (!err && resp.statusCode === 200) {
var resultAsJSON = JSON.parse(body);
console.log(reqURL);
console.log("Request #" + i + " done");
}

i += 1;

if (i === 5) {
continueWhilst = false;
}

console.log("Iterating, i= " + i);

// This is in the callback for request now.
next();
});
}

关于javascript - 如何在 node.js 中异步执行多个 REST API 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21489338/

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