代码之家  ›  专栏  ›  技术社区  ›  shad0w_wa1k3r

等待运算符的位置

  •  4
  • shad0w_wa1k3r  · 技术社区  · 6 年前

    我想知道这个系统的灵活性 await JavaScript中的运算符。具体来说,我们如何在表达式中使用它(在 async 函数)。

    !await Promise.resolve(10);
    await !Promise.resolve(10);
    

    以上两项(或两者)中哪一项有效&哪个更“传统”?表达式的预期返回值为 !10

    对于泛化,可以用任何其他类型的表达式/操作代替 !

    for (const i=0; i < await Promise.resolve(10); i++) {...}
    

    有没有一个深入的官方文件,我可以参考?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Mark    6 年前
    for (const i=0; i < Promise.resolve(10); i++)
    

    价值 Promise.resolve(10) i < Promise.resolve(x) i > Promise.resolve(x) 因为你在和 NaN

    // all comparisons with NaN are false
    console.log(10 < Promise.resolve(1))
    console.log(10 > Promise.resolve(1))
    console.log(10 == Promise.resolve(1))
    console.log(Promise.resolve(1) == Promise.resolve(1))

    能够

    async function test(){
        for (let i = 0; i < await Promise.resolve(10); i++){
            console.log(i)
        }
    }
    test()

    同样地, !Promise.resolve(10) 将得到 not some promise 而不是 not 10 . 但是等待结果的工作和预期的一样,因为那时你正在比较一个数字。

        2
  •  1
  •   Kevin    6 年前

    首先, Promise.resolve(10) 返回立即解析为值10的承诺。

    其次,你总是需要 await 来自内部的承诺 async 功能。

    所以我不认为你的例子有什么意义,除了也许 !await Promise.resolve(10); ,假设你想 !10

    以你的for循环为例, for (const i=0; i < Promise.resolve(10); i++) {...}

        3
  •  0
  •   Tarek Essam    6 年前

    我<承诺。决心(10) 永远都是假的因为 承诺。决心(10) 是一个对象,因此循环体永远不会执行。