【问题标题】:If I replace Promises on the global object, what Promises do async/await use?如果我替换全局对象上的 Promises,async/await 使用什么 Promises?
【发布时间】:2020-04-12 09:53:17
【问题描述】:

假设我将全局 Promise 对象替换为 Bluebird 承诺(例如支持取消)。如果我再用async/await写一个函数:

async function foo() {
    const response = await fetch(...);
    const result = doSomethingWith(response);
    return result;
}

这里返回了什么样的Promise?

IIRC 当代码编译到 ES5 时,它确实会返回一个可取消的 Bluebird 承诺,因为 async/await 被转换为在内部使用全局 Promise 对象。但是在 ES7 中,async/await 是原生构造,它会使用全局对象中的 Promise 构造,还是硬编码使用原生构造?

【问题讨论】:

标签: javascript promise bluebird ecmascript-2016


【解决方案1】:

本机语法将始终从当前领域创建本机承诺对象,无论领域中的全局 Promise 变量具有什么值。

转译器应该努力重新创建这种体验,但是当它还包含一个需要存在于某个地方的 Promise shim(可能被配置为自定义库)时,为了简单起见,它可能取决于全局 Promise 值。

【讨论】:

    猜你喜欢
    • 2017-11-18
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2021-12-15
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多