根据Mozilla,只等待Promise:
[rv]返回promise的已解析值,如果它不是Promise,则返回值本身。
如果等待非承诺,将立即退回已解决的承诺,并且不会等待。但是,以下代码等待而不使用Chrome中的Promise& 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();
根据规范,是否应该等待承诺类型的非Promise对象? (我尝试查看规范(从Mozilla文章链接),但我无法理解。)
答案 0 :(得分:1)
答案 1 :(得分:1)
await
将触发obj.then()
,并导致该行为。因为即使obj
不是Promise,也是可用对象。
您有关于here的一些信息。
在你的情况下,它起作用是因为:
首先勾选
obj
已初始化setTimeout()
被执行,其回调将在下一个刻度中被调用go()
go()
await
在go()
内触发,执行obj.then()
,将解析功能分配给obj.func
第二次打勾
setTimeout()
回调已执行,通过值obj.func()
的{{1}}解决承诺第三次打勾
57
,结果go()
已记录