首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >等待在表达和陈述中表现得类似吗?

等待在表达和陈述中表现得类似吗?
EN

Stack Overflow用户
提问于 2020-02-29 22:14:29
回答 2查看 64关注 0票数 0

对于语句,await可以考虑将后续语句放入.then中。

await对表达式的工作方式类似吗?

例如,在阻止p1的解析进度之前,以下是否阻止了p2的解析进度?

代码语言:javascript
运行
复制
const p1 = Promise.resolve()
const p2 = Promise.resolve()
return [await p1, await p2]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-29 22:18:00

await适用于所有表达式。在x是表达式的情况下,await x也是一个有效的表达式(异步解析)。这一表述也可能是一种独立的陈述,也可能不是。

但是,请记住,awaits总是按顺序处理的。你的

代码语言:javascript
运行
复制
return [await p1, await p2]`

将等待p1解析,然后等待p2解析,然后返回包含这两个解析值的数组。通常,在这种情况下,您可能希望使用Promise.all来代替:

代码语言:javascript
运行
复制
return Promise.all([p1, p2])

如果你不这样做,你可能会遇到未经处理的拒绝--例如,如果p2拒绝而不是await__ed

代码语言:javascript
运行
复制
(async () => {
  const p1 = new Promise(res => setTimeout(res, 1000));
  const p2 = new Promise((res, rej) => setTimeout(rej));
  return [await p1, await p2];
})()
  .catch(() => {
    console.log('error caught');
  });
  
window.addEventListener('unhandledrejection', () => {
  console.log('unhandled rejection; p2 was not being awaited at the time it rejected');
});

(另外,如果您有一个函数调用返回一个承诺,而不是已经存在的承诺,Promise.all方法将更快地解析,因为它将等待这些承诺并行地解决)

票数 3
EN

Stack Overflow用户

发布于 2020-02-29 22:21:09

await表达式重写为单个语句:

代码语言:javascript
运行
复制
const p1 = Promise.resolve()
const p2 = Promise.resolve()
const _temp1 = await p1
const _temp2 = await p2
return [_temp1, _temp2]

然后,您可以将它们转换为等效的then代码:

代码语言:javascript
运行
复制
const p1 = Promise.resolve()
const p2 = Promise.resolve()
return Promise.resolve(p1).then(_temp1 => {
    return Promise.resolve(p2).then(_temp2 => {
        return [_temp1, _temp2]
    })
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60470078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档