Javascript 等待不承诺是否有任何可检测的影响?

Javascript 等待不承诺是否有任何可检测的影响?,javascript,ecmascript-2017,Javascript,Ecmascript 2017,一个人可以等待一个不承诺的承诺 所有这些表达式均有效且不会导致错误: await 5 await 'A' await {} await null await undefined 等待不承诺是否有任何可检测的影响?为了避免潜在的错误,在行为上是否有任何差异?有什么性能差异吗 以下两行完全相同还是理论上不同 怎么做?有什么例子可以证明这种区别吗 PS:根据这一点,有一个区别: var x=wait 5与var x=5不同变量x=等待5将在下一个tern中分配x5,其中asvar x=5将立即计算

一个人可以等待一个不承诺的承诺

所有这些表达式均有效且不会导致错误:

await 5
await 'A'
await {}
await null
await undefined 
等待不承诺是否有任何可检测的影响?为了避免潜在的错误,在行为上是否有任何差异?有什么性能差异吗

以下两行完全相同还是理论上不同

怎么做?有什么例子可以证明这种区别吗

PS:根据这一点,有一个区别:

var x=wait 5
var x=5不同<代码>变量x=等待5将在下一个tern中分配x5,其中as
var x=5将立即计算


await
不是禁止。如果等待的东西不是承诺,那么它被包装在承诺中,承诺被等待。因此,
wait
更改执行顺序(但您不应依赖它):

另外,
await
不仅适用于Promise
s的
实例,而且适用于具有
的每个对象。然后
方法:

await { then(cb) { /* nowhere */ } };
console.log("will never happen");
等待不承诺是否有任何可察觉的影响

当然,
。然后,如果它存在于等待的对象上,就会调用它

为了避免潜在的错误,在行为上是否有任何差异

如果你不想让一个方法成为一个承诺,就不要把它命名为“then”

有什么性能差异吗


当然,如果你等待一些事情,你总是会把继续工作推迟到一个微任务上。但一如既往:你可能不会注意到(作为一个观察结果的人)。

完全同意乔纳斯的说法。有一件事在他的问题中没有得到回答,那就是以下两行完全相同还是理论上不同

以下两条线并不完全相同,它们在理论上是不同的

  • 变量x=5
  • var x=等待5
  • 第一条和第二条语句在我的控制台中的执行时间分别为0.008056640625ms0.05590820325msasync/await、setTimeOut等是运行时提供的API,JavaScript运行时在这些API中运行。
    将等待置于非承诺上将在
    事件循环中执行。第1行将在到达
    堆栈后立即执行,但第2行将花费很少的时间(毫秒)因为跳过webAPI等待部分后,它将首先进入
    堆栈
    ,然后进入
    任务队列
    ,因为没有解决问题的承诺&最后在这之后,将再次将控制权交给
    堆栈
    执行

    你所说的“不”是什么意思?你的意思是
    不是禁止操作
    对吗?@kunal-yup,我打字比键盘反应快,导致一些有趣的打字错误:)“但你不应该依赖它”为什么不呢?@aBetterOliver示例:你开始两个非常短的动作,并想处理它们的结果。您知道操作1的查找时间早于操作2,因此您将1的结果存储在一个变量中,并在操作2完成时访问该结果。现在有人修改了算法,使得1比2慢。你的代码坏了,没人知道为什么。如果您必须以特定的顺序执行异步任务,那么应该明确地写下来。我认为这个问题已经用示例代码片段回答了。无论如何谢谢你!实际上,问题的最后一部分缺失了,即下面的两行是完全相同还是理论上不同?@jonaswillms的示例代码非常清楚地显示了差异……太好了。那么,假设它是另一种解释:)
    console.log(1);
    (async function() {
      var x = await 5; // remove await to see 1,3,2
      console.log(3);
    })();
    console.log(2);
    
    await { then(cb) { /* nowhere */ } };
    console.log("will never happen");