如果我替换全局对象上的 Promises,async/await 使用什么 Promises?

If I replace Promises on the global object, what Promises do async/await use?

假设我将全局 Promise 对象替换为 Bluebird 承诺(例如支持取消)。如果我然后使用 async/await:

编写一个函数
async function foo() {
    const response = await fetch(...);
    const result = doSomethingWith(response);
    return result;
}

这里 return 是什么类型的 Promise?

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

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

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