gpt4 book ai didi

javascript - 使用 nodejs 阻止 API 调用

转载 作者:行者123 更新时间:2023-11-30 08:54:34 25 4
gpt4 key购买 nike

我不确定这是否是执行此操作的正确方法,但我希望在 for 循环中发出 10 个 API 请求,并且我希望每个 API 请求都被阻塞。也就是说,等到我收到响应而不去回调,然后再次迭代 foor 循环。这是 foor 循环

for (var i=0; i< out.items.length; i++) {
var object = makediffbotAPIcall(out.items[i]);
console.log(object);
}

请求函数如下

function makediffbotAPIcall(item, array) {
var url_to_send_diffbot = "string of url here";

request(url_to_send_diffbot, function (error, response, body) {
if (!error && response.statusCode == 200) {
var article_object = JSON.parse(body)
var object = {"Title": article_object.title, "Url":article_object.url};
}

});

return object;
}

此代码的问题是对象没有及时返回,以便 foor 循环使用它。我尝试在 makediffbotAPIcall 函数的末尾放置一个 setTimeout,但这也不起作用。非常感谢任何建议。谢谢!

最佳答案

有一个非常好的 node.js 库“async”用于管理异步环境中的控制流。对于此特定问题,请使用 https://github.com/caolan/async#forEach系列版本并且在 makediffbotAPIcall 中有一点修改使事情完全按照您正在寻找的方式工作所以这里是解决方案

async.forEachSeries(out.items,function(item,callback){
makediffbotAPIcall(item,out.items,function(object){
//here you will get either object or null
callback();
}),function(err){
// this will be called when all array items will get processed
})

function makediffbotAPIcall(item, array, callback) {

var url_to_send_diffbot = "string of url here"


request(url_to_send_diffbot, function (error, response, body) {
if (!error && response.statusCode == 200) {
var article_object = JSON.parse(body)
return callback({"Title": article_object.title, "Url":article_object.url})

}
else
return callback(null);
})
}

我不确定 makediffbotAPIcall 的第二个参数我假设你想传递完整的数组,所以我只是传递整个数组,如果不是这种情况你可以根据需要修改它。

如果您有任何问题,请告诉我。

关于javascript - 使用 nodejs 阻止 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14781763/

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