gpt4 book ai didi

javascript - 使用循环中第一个请求的参数在另一个请求中请求

转载 作者:行者123 更新时间:2023-12-03 04:29:32 26 4
gpt4 key购买 nike

大家好,我正在尝试将从第一个 api url 请求接收到的值用作第二个 api url 的参数。因此,我创建了一个 for 循环,其想法是,对于我正在迭代的数组中的每个元素,都将其作为参数发送(如您在变量用户、语言、城市下面看到的那样)。

但我认为它不起作用,因为for循环是同步的,而来自nodejs的模块请求是异步的。但是我想不出另一种方法来做到这一点......

request(firstUrl, function(err, res, body) {

let input = JSON.parse(body);

for( var i=0 ;i< input.length; i++){

var user= input[i]["user"]
var language= input[i]["language"]
var city= input[i]["city"]
var query_url= encodeURIComponent('{"data":{"call":{"data":[{"text":'+city+',"language":'+language+',"user":'+user+',"id":'+id+'}]}}}')

var secondUrl = {

url: `http://api.com/?request=${query_url}`,
method: 'GET',
headers: {
"Content-type": "application/json"

}
};
request(secondUrl, function(err, res, body) {
let input = JSON.parse(body);
console.log(err)
console.log(res)
console.log(input)

});
}

return mongo.multiSave(input.contents)

});

最佳答案

事实上,正如之前的答案,promise 可以通过更具可读性的代码轻松实现这一点。结账request-promise 。我也用Promise.all并行解决所有第二个请求 promise 。这是我的解决方案(我没有测试代码)

request(firstUrl).then(function(body) {
return JSON.parse(body);
}).then(function(input) {
return Promise.all(secondRequests(input));
}).then(function(bodies) {
bodies.forEach(function(body) {
let input = JSON.parse(body);
console.log(err)
console.log(res)
console.log(input)
})
}).catch(function (err) {
});

function secondRequests(input) {
var promises = [];
for( var i=0 ;i< input.length; i++){
var user= input[i]["user"]
var language= input[i]["language"]
var city= input[i]["city"]
var query_url= encodeURIComponent('{"data":{"call":{"data":[{"text":'+city+',"language":'+language+',"user":'+user+',"id":'+id+'}]}}}')
var secondUrl = {
url: `http://api.com/?request=${query_url}`,
method: 'GET',
headers: {
"Content-type": "application/json"
}
};
promises.push(request(secondUrl));
}
return promises;
}

关于javascript - 使用循环中第一个请求的参数在另一个请求中请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43547905/

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