【问题标题】:Does an 'async' function immediately return resolve(undefined) unless this is explicitly overrided?除非明确覆盖,否则“异步”函数是否会立即返回 resolve(undefined)?
【发布时间】:2019-06-28 07:48:53
【问题描述】:

通过覆盖异步函数立即返回的 resolve(undefined),我的意思是使用:

return new Promise(resolve, reject)... resolve(variableName)

另外,如果这确实是默认行为,还有其他方法可以覆盖它吗?

编辑:感谢@Quentin 的新理解。以下如有错误请更正。

当您在没有等待的情况下调用 async function1() {... 之类的异步函数时:

function1 将阻塞(仅使用 await 或 then “异步”任务)并将运行到完成。

function1 不会立即返回任何内容(即空的、未定义的或待处理的承诺)。

如果没有明确的 return 语句,function1 返回 Promise {undefined}。

如果有awaitreturn new Promise..,function1 会返回 Promise { pending },因为它们会将任务添加到事件循环微任务队列中。

如果使用了return varName,function1 将通过一个值履行/拒绝承诺。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    async 函数将运行并返回一个承诺。

    当函数结束时,它会用通常的返回值来解决这个承诺。 (如果你在里面使用await,那么直到async函数解冻并到达末尾,promise才会被解析。)

    没有return 语句的函数的默认返回值为undefined,所以如果你不包含return 语句,它将返回一个用undefined 解析的promise。

    如果您返回一个承诺,那么它将返回一个已解决的承诺,该承诺将被正常采用。

    如果你返回别的东西,那么承诺会用那个值来解决。

    【讨论】:

    • 想我明白了,谢谢。我已经编辑了我的原始帖子,以通过格式化文本传达我的新理解。如果您发现任何错误,请告诉我。
    猜你喜欢
    • 2019-12-29
    • 2016-01-02
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2016-11-08
    • 2022-12-23
    • 1970-01-01
    相关资源
    最近更新 更多