gpt4 book ai didi

javascript - 异步循环中的 Node.js Api 调用

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:21 28 4
gpt4 key购买 nike

我在进行多次 api 调用并在正确位置获取返回结果时遇到困难。这就是我想要实现的目标:两个循环,嵌套。外部循环遍历一个复杂的 json 对象,并将一些对象的值放在数组调用框中。内部循环调用 api 并将返回的结果放在名为 bag 的数组中。所以我有装满数据的盒子和袋子。当循环和 api 调用都结束时,我想访问 box 和 bag 中的数据并对其进行处理。我只是不确定在同一执行点访问两个数组的最佳方法。这是我目前所拥有的,但当然 bag 和 box 是空的,因为它们在所有循环和 api 调用结束之前被调用。

var data = {}//a json object with data;
var bag = [];
var box = [];

async.forEach(data.item, function(item, callback){

async.forEach(item.name, function(name, callback){

callApi(item.name, function(obj){

bag.push(obj);
});

callback();

}

box.push(item);
callback();

});


function callApi(name, callback){

asyncApiCall(url+name, function(err, result){

callback(result);
});

}

//when all loops and api requests are done
//do stuff with contents of box and bag here;
console.log(bag, box);

最佳答案

您可以使用计数器来确保所有异步调用都已返回,然后调用回调。一个例子:

function performAsyncOperation(data, onCompletion) {
var bag = [];
var box = [];
var count = 0;

async.forEach(data.item, function(item, callback){
async.forEach(item.name, function(name, callback){
count += 1;
callApi(item.name, function(obj){
bag.push(obj);
count -= 1;
if (count == 0) {
onCompletion(null, { bag:bag, box:box });
}
});
callback();
}
box.push(item);
callback();
});
}

countonCompletion 是上面的重要部分。

关于javascript - 异步循环中的 Node.js Api 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15170280/

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