NuO*_*One 5 javascript async-await ecmascript-6
为什么我无法使用.异步等待返回对象访问对象属性?我知道我可以访问如下属性。
let val1 = await call(3);
let val2 = await call(4);
Run Code Online (Sandbox Code Playgroud)
但我很感兴趣这是否可以做到
let v = await call(3).val + await call(4).val;
Run Code Online (Sandbox Code Playgroud)
let val1 = await call(3);
let val2 = await call(4);
Run Code Online (Sandbox Code Playgroud)
您正在尝试等待Promiseval属性的值。
您需要等待承诺,然后val从结果中读取属性:(await call(3)).val
const call = (x) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
val: x
});
}, 3000)
})
}
const dummy = async () => {
let v = (await call(3)).val + (await call(4)).val;
alert(v);
}
dummy()Run Code Online (Sandbox Code Playgroud)
只需将await要等待的表达式括在括号中即可。然后访问该属性。
const call = (x) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
val: x
});
}, 3000)
})
}
const dummy = async() => {
let v = (await call(3)).val + (await call(4)).val;
alert(v);
}
dummy()Run Code Online (Sandbox Code Playgroud)
请注意,这样做时,您将等待第一个呼叫 3 秒,然后再等待第二个呼叫 3 秒。除非第二个调用在某种程度上依赖于第一个,否则我建议您执行以下操作:
const call = (x) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
val: x
});
}, 3000)
})
}
const dummy = async() => {
// Call both in parallel
let val1 = call(3);
let val2 = call(4);
// Await for both
let v = await Promise.all([val1, val2]);
// *then* add
alert(v[0].val + v[1].val);
}
dummy()Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2472 次 |
| 最近记录: |