gpt4 book ai didi

javascript - 等待 aysnc 调用每个

转载 作者:行者123 更新时间:2023-11-29 16:33:35 26 4
gpt4 key购买 nike

我有一个函数,我想完成第一个 this.findLocation()在返回 jsonObject 之前的每个循环上。问题是当函数返回 jsonObject 时,一些 findlocation仍未完成循环。

这是该函数的代码:

generate (item) {
let jsonObj = {}
jsonObj.lookup = this.id
this.fields.forEach(field => {
if (field.prop === 'API') {
this.findLocation(item, field).then(function (value) {
let location = value
if (location) jsonObj[field.prop] = location.id
})
} else {
jsonObj[field.prop] = item[field.header]
}
})
return jsonObj
}

如有任何帮助,我们将不胜感激。

最佳答案

您需要使用Promise.all等待每个异步操作完成:

generate (item) {
const obj = { lookup: this.id };
const proms = this.fields.map((field) => {
if (field.prop === 'API') {
// Make sure to *return* the `Promise`:
return this.findLocation(item, field).then((value) => {
if (value) obj[field.prop] = value.id
})
} else {
obj[field.prop] = item[field.header]
}
});
return Promise.all(proms)
.then(() => obj);
}

请注意,当使用 .map 时像这样,只有数组中的某些项目是 Promises,但这很好 - Promise.all只会等待数组中的 promise 解决。数组中的非 promise (包括 undefined 值)将被忽略。

此外,一如既往, There's no such thing as a "JSON Object" - 如果你有一个对象或数组,那么你就有一个对象或数组,句号。 JSON 格式是一种在字符串中表示对象的方法,例如 const myJSON = '{"foo":"bar"}' 。如果不涉及字符串、序列化或反序列化,则也不涉及 JSON。

关于javascript - 等待 aysnc 调用每个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53405223/

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