等待非承诺有任何可检测的效果吗?
Does awaiting a non-Promise have any detectable effect?
可以 await
一个非 Promise 和 that's good so.
所有这些表达式都是有效的并且不会导致错误:
await 5
await 'A'
await {}
await null
await undefined
等待非 Promise 是否有任何可检测的效果?为了避免潜在的错误,人们应该注意的行为有什么不同吗?有任何性能差异吗?
下面两行是完全相同还是理论上不同?:
var x = 5
var x = await 5
怎么样?任何例子来证明差异?
PS:根据TypeScript authors,有区别:
var x = await 5;
is not the same as var x = 5;
; var x = await 5;
will assign x 5 in the next tern, where as var x = 5;
will evaluate immediately.
await
不是空操作。如果等待的东西不是一个承诺,它被包裹在一个承诺中,那个承诺是等待的。因此 await
改变了执行顺序(但你不应该依赖它):
console.log(1);
(async function() {
var x = await 5; // remove await to see 1,3,2
console.log(3);
})();
console.log(2);
此外 await
不仅适用于 instanceof Promise
s,而且适用于每个具有 .then
方法的对象:
await { then(cb) { /* nowhere */ } };
console.log("will never happen");
Is there any detectable effect of awaiting a non-Promise?
当然,.then
如果它存在于等待的事物上,就会被调用。
Is there any difference in behavior one should be aware of to avoid a potential error?
如果您不希望方法成为 Promise,请不要命名方法 "then"。
Any performance differences?
当然,如果您等待某些事情,您将始终将继续推迟到微任务。但一如既往:您可能不会注意到它(作为观察结果的人)。
完全同意乔纳斯的说法。他的问题中没有回答的一件事是 以下两行是完全相同还是理论上不同?:
以下两行不完全相同,理论上是不同的。
- 变量 x = 5
- var x = 等待 5
在我的控制台中,第一条和第二条语句的执行时间分别为 0.008056640625ms 和 0.055908203125ms。
async/await、setTimeOut等是运行时间提供的API,其中JavaScript运行时间为运行.
将等待放在非承诺上将在 event-loop
中执行。第 1 行将在到达 stack
后立即执行,但第 2 行将花费一些时间(毫秒),因为它会在跳过 webAPI 等待后首先转到 stack
然后转到 task queue
部分,因为没有承诺要解决 & 最后,控制权将再次交给 stack
执行。
可以 await
一个非 Promise 和 that's good so.
所有这些表达式都是有效的并且不会导致错误:
await 5
await 'A'
await {}
await null
await undefined
等待非 Promise 是否有任何可检测的效果?为了避免潜在的错误,人们应该注意的行为有什么不同吗?有任何性能差异吗?
下面两行是完全相同还是理论上不同?:
var x = 5
var x = await 5
怎么样?任何例子来证明差异?
PS:根据TypeScript authors,有区别:
var x = await 5;
is not the same asvar x = 5;
;var x = await 5;
will assign x 5 in the next tern, where asvar x = 5;
will evaluate immediately.
await
不是空操作。如果等待的东西不是一个承诺,它被包裹在一个承诺中,那个承诺是等待的。因此 await
改变了执行顺序(但你不应该依赖它):
console.log(1);
(async function() {
var x = await 5; // remove await to see 1,3,2
console.log(3);
})();
console.log(2);
此外 await
不仅适用于 instanceof Promise
s,而且适用于每个具有 .then
方法的对象:
await { then(cb) { /* nowhere */ } };
console.log("will never happen");
Is there any detectable effect of awaiting a non-Promise?
当然,.then
如果它存在于等待的事物上,就会被调用。
Is there any difference in behavior one should be aware of to avoid a potential error?
如果您不希望方法成为 Promise,请不要命名方法 "then"。
Any performance differences?
当然,如果您等待某些事情,您将始终将继续推迟到微任务。但一如既往:您可能不会注意到它(作为观察结果的人)。
完全同意乔纳斯的说法。他的问题中没有回答的一件事是 以下两行是完全相同还是理论上不同?:
以下两行不完全相同,理论上是不同的。
- 变量 x = 5
- var x = 等待 5
在我的控制台中,第一条和第二条语句的执行时间分别为 0.008056640625ms 和 0.055908203125ms。
async/await、setTimeOut等是运行时间提供的API,其中JavaScript运行时间为运行.
将等待放在非承诺上将在 event-loop
中执行。第 1 行将在到达 stack
后立即执行,但第 2 行将花费一些时间(毫秒),因为它会在跳过 webAPI 等待后首先转到 stack
然后转到 task queue
部分,因为没有承诺要解决 & 最后,控制权将再次交给 stack
执行。