据Mozilla,等待只待承诺:是否等待等待诺言般的对象?
[RV]返回承诺的解析值,或本身的价值,如果它不是一个承诺。
如果您等待非承诺,已解决的承诺将立即返回,并且不会等待。但是,以下代码正在等待,而不使用Chrome中的Promises & FF。
var obj = {
then:func => obj.func=func
};
setTimeout(() => obj.func(57), 1000);
async function go() {
var res = await obj;
console.log(res); //shows '57' after 1000ms
}
go();
根据该规范,应等待等待许状物体不属于承诺? (我试过看规格(从Mozilla的文章链接),但我无法理解。)
主要问题是什么承诺为ES-transpiler /解释器,其执行等待操作。例如,您可以使用蓝鸟承诺,但默认配置下的babel将无法理解它。主要定义之一是'promise === Promise.resolve(promise)',但是编译时转译器无法看到它。 –
在实践中,最有可能的是,Promise是一些有意思的东西,这意味着再生器运行时的Promise,这被广泛用于实现。有关详细信息,请参阅https://babeljs.io/docs/plugins/transform-async-generator-functions/。 –
其实它使用的承诺,你就看不出来:-)顺便说一句,这些“承诺状物体”也被称为[* thenables *](https://stackoverflow.com/q/29435262/1048572)。 – Bergi