JS:异步函数隐式解包了诺言?

编程入门 行业动态 更新时间:2024-10-06 10:41:19

JS:异步函数隐式解<a href=https://www.elefans.com/category/jswz/34/1602370.html style=包了诺言?"/>

JS:异步函数隐式解包了诺言?

据我所知,异步函数将其返回值隐式包装为一个Promise。这对每个财产都适用,但承诺自己除外。

async function f() {
  return new Promise((res) => {
    setTimeout(() => {
      res("Why am I being unwrapped")
    }, 1000)
  })
}

(async () => {
  console.log(await f())
})()

那些在退货前先被解开。这样await f()实际上会等待两个嵌套的Promise。

请注意,这也适用于显式创建的Promises(Promise.resolve(new Promise(...))

是否有good方式可以避免这种情况?我真的很想在没有类似Quickfix的情况下嵌套Promise。

async function y() {
  return {wrapped: new Promise((res) => {
    setTimeout(() => {
      res("Why am I being unwrapped")
    }, 1000)
  })}
}

(async () => {
  console.log((await y()).wrapped)
})()

Sandbox

回答如下:

根据MDN documentation on async functions:

异步函数总是返回承诺。如果异步函数的返回值不是显式的promise,则将其隐式包装在promise中。

换句话说,由于您返回的是Promise,因此不会被包装。如果您想重新包装它,可以,但是您也可以去除具有类似效果的async关键字。您将原始的Promise退还[[除非您async

非常有效:

await

哪个会给您输出像:

function f() { return new Promise((res) => { setTimeout(() => { res("Might be wrappers on some of you, but not on me!") }, 1000) }) } (async () => { console.log(f()) })()

更多推荐

JS:异步函数隐式解包了诺言?

本文发布于:2024-05-07 12:37:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756279.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:包了   函数   诺言   隐式   JS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!