JS:等待已解决的承诺被我无法访问的承诺包裹着回来了



我最终推动未解决的承诺成为对象的值,然后等待稍后调用这些承诺:

let names = ["aaron", "bob", "john", "aaron"];
let allNames = {};

//只是用名称作为关键来设置我的对象

names.forEach(name => {
if (!allNames[name]) {
allNames[name] = null;
}
});

//并行迭代并运行异步请求,并将未解析的promise存储为对象值

let allDataForNamedPerson;
for (const [x] of names) {
if (!allNames[name]) {
allDataForNamesPerson = this.getNameData(name)// async api call

allNames[name] = allDataForNamesPerson // storing the promise
}
}

然后我等待,直到所有这些都解决;

await Promise.all([...Object.values(this.allNames)]);

我的问题是,当我从对象中查找一个已解析的值时,例如:

allNames["john"],控制台中的值一个包裹在promise中的Object:

promise {
salary: 41992,
position: clerk
}

所以我不能通过allNames["john"].salary访问它——它返回为未定义。我在这里做错了什么?

await不会用承诺的值替换承诺。如果你想使用价值观,你必须自己抓住它们:

const resolvedValues = await Promise.all([...Object.values(this.allNames)]);

然后CCD_ 4给你展开的数据。

使用裸await只能保证给定的promise在await行之后的代码中得到解决,但值仍然被包装。

最新更新