Javascript 如果替换全局对象上的承诺,async/await会使用哪些承诺?

Javascript 如果替换全局对象上的承诺,async/await会使用哪些承诺?,javascript,promise,bluebird,ecmascript-2016,Javascript,Promise,Bluebird,Ecmascript 2016,假设我将全局Promise对象替换为蓝鸟承诺(例如支持取消)。如果然后我使用async/wait编写函数: async function foo() { const response = await fetch(...); const result = doSomethingWith(response); return result; } 什么样的承诺会在这里得到回报 IIRC当代码编译到ES5时,它确实会返回一个可取消的Bluebird承诺,因为async/await

假设我将全局
Promise
对象替换为蓝鸟承诺(例如支持取消)。如果然后我使用
async
/
wait
编写函数:

async function foo() {
    const response = await fetch(...);
    const result = doSomethingWith(response);
    return result;
}
什么样的承诺会在这里得到回报


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

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

transpiler应该努力重新创建这种体验,但是,当它还包括一个promise shim(可能配置为自定义库)时,它需要住在某个地方,并且为了简单起见,可能取决于全局
promise
值。

请查看