【发布时间】:2023-03-08 08:15:01
【问题描述】:
我有一系列请求,我想在 for 循环中调用。
我在端点中唯一改变的是索引参数。这个索引参数应该和for-loop(0-100)的索引一样。
但是,承诺返回值都是来自端点之一的相同响应。 (即所有的返回值都是我对 ${someEndPoint}?index=61 的期望)。
someIndex = 100
var promises = [];
for (var i = 0; i < someIndex; i++){
var options = {
method: 'GET',
uri: `${someEndPoint}?index=${i}`,
json: true
}
promises.push(request(options))
}
Promise.all(promises).then(function(values){
console.log(values) // returns array of 100 of the same responses.
}).catch(e => {
console.log(e)
});
附:我正在使用 node.js 服务器,它显示我的服务器已进行了所有 100 次正确的 GET 调用,但值对象仅多次填充了一个特定的请求响应。
[{ index: 70, data: '...' },
{ index: 70, data: '...' },
...
{ index: 70, data: '...' },
{ index: 70, data: '...'} ]
我想怎样才能得到正确的回答?
【问题讨论】:
-
您发布的代码不应该有这个问题,所以如果这是导致您的问题的代码,那么它可能是
request方法做错了。您可以使用 mapPromise.all([...new Array(100)].map((_,i)=>i).map(i=>request(...i)).then(result=>...)来简化代码 -
我刚刚检查了我调用的端点有问题(我也写过)。如果其他人遇到同样的问题,那是因为我在代码中错过了
var,这使得一些变量成为全局变量。在github上发现了一个类似的问题:github.com/request/request-promise/issues/212.
标签: javascript node.js promise request request-promise