ttu*_*lka 6 javascript ecmascript-2017
一个可以await是非承诺的,这很好。
所有这些表达式都是有效的,不会导致任何错误:
await 5
await 'A'
await {}
await null
await undefined
Run Code Online (Sandbox Code Playgroud)
等待不承诺有任何可检测的影响吗?为了避免潜在的错误,应该注意哪些行为上的差异?是否有任何性能差异?
以下两行是完全相同还是理论上不同?
var x = 5
var x = await 5
Run Code Online (Sandbox Code Playgroud)
怎么样?有什么例子可以证明区别吗?
PS:根据TypeScript作者,有一个区别:
var x = await 5;与...不同var x = 5;;var x = await 5;将在下一个tern中分配x 5,其中asvar x = 5;将立即评估。
fah*_*ail 13
完全同意乔纳斯的说法。他的问题中没有回答的一件事是以下两行完全相同还是理论上不同?:
以下两行并不完全相同,它们在理论上是不同的。
我的控制台中第一条和第二条语句的执行时间分别为0.008056640625ms和0.055908203125ms。
async/await、setTimeOut 等是运行时提供的 API,其中运行 JavaScript 运行时。
将 await 置于 non-promise 将在event-loop. 第 1 行将在到达后立即执行,stack但第 2 行将花费很少的时间(毫秒),因为它将首先转到stack,然后转到task queue跳过 webAPI 等待部分后,因为没有承诺要解决,最后在该控制之后给予stack再次执行。
Jon*_*lms 10
await不是禁忌。如果等待的事物不是承诺,则将其包装在承诺中,等待该承诺。因此,await更改了执行顺序(但是您仍然不应依赖它):
console.log(1);
(async function() {
var x = await 5; // remove await to see 1,3,2
console.log(3);
})();
console.log(2);
Run Code Online (Sandbox Code Playgroud)
另外,await它不仅适用于instanceof Promises,而且适用于使用.then方法的每个对象:
await { then(cb) { /* nowhere */ } };
console.log("will never happen");
Run Code Online (Sandbox Code Playgroud)
等待不承诺有任何可检测的影响吗?
当然,.then如果它在等待的事物上存在,就会被调用。
为了避免潜在的错误,应该注意哪些行为上的差异?
如果您不希望将其命名为Promise,请不要将其命名为“ then”。
是否有任何性能差异?
当然,如果您等待事情,您将始终将继续工作推迟到微任务上。但还是一如既往:您可能不会注意到它(作为观察结果的人类)。
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |