gpt4 book ai didi

javascript - Promise.all() 返回的结果未捕获作用域变量

转载 作者:行者123 更新时间:2023-11-28 18:34:54 24 4
gpt4 key购买 nike

我在从 queryArray 捕获每个 id 并将其与返回 promise 结果一起存储时遇到问题。

getSavedQueries: function(req, res) {
SPromise.then(function(client) {
const SavedQuery = client.Reports;
var queryArray = req.query.queryArray; // ['123', '234', '456']
var payloadObj = {};
var actions = lo.map(queryArray, function(id) {
var queryID = Number(id);
*payloadObj['ID'] = queryID;* <--- not sure where to put this
return SavedQuery.findOne(queryID).then(function(result){
payloadObj['query'] = result;
return payloadObj
});
});
return Promise.all(actions);
}).then(function(result){
return res.json(result)
});
}

my res.json(result) 返回所有三个对象的数组中的最后一项:

[ {ID: 456, query: ...}, 
{ID: 456, query: ...},
{ID: 456, query: ...}]

而不是:

  [ {ID: 123, query: ...}, 
{ID: 234, query: ...},
{ID: 456, query: ...}]

最佳答案

问题是 payloadObj 是在 map 回调之外定义的。因此,同一个对象在映射回调期间发生变化,并从在映射回调中创建的 Promise 上调用的 then 方法返回,以便数组传递给 Promise.all 包含 3 个 promise ,它们都将解析为同一个对象,其 ID 属性将是数组中的最后一个 ID(因为此映射回调是最后调用的)并且其 query 属性将是最后一个成功请求的结果(可能但不一定是最后一个请求)。

关于javascript - Promise.all() 返回的结果未捕获作用域变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304203/

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