2016-02-03 35 views
1

下面的代码是否可以输出HERE承诺是懒惰评估?

var p = new Promise(() => console.log("HERE")) 

(也就是说,不var p = new Promise(fn)始终执行fn如果p.then(…)是从来没有所谓的做一些事情,结果?)

更具体地说,在服务人员的情况下,如果我叫Cache.delete(),但从来没有打电话.then()关于返回值(或者我扔掉返回值),是否保证删除缓存条目?

回答

5

是的,它是有保证的。该specification of Promise具有该步骤,这将始终进行评估:。

  • 令完成是调用(执行者,未定义,«resolvingFunctions [[解决],resolvingFunctions [[拒绝] ]»)。
  • 其中executor是你通过什么样的Promise构造函数,Call导致代码正在运行。这一切发生在Promise甚至返回到您的p变量之前。

    +0

    或者简单地说:传递给'Promise'构造函数的executor函数'()=> console.log(“HERE”)总是立即执行。 – ftor

    +0

    @ LUH3417是的,但OP想知道它是否有保证,因此引用和引用规范,说明它在哪里以及如何被调用,因此_why_它有保证。 –

    +0

    没有冒犯,只是对不熟悉“spec说话”的用户 – ftor

    2

    正如詹姆斯说的那样,保证函数将被调用。虽然这并不能保证缓存条目被删除!

    您必须检查承诺分辨率的值(如果缓存条目被删除,则为true,否则为false)。

    +0

    啊好点,那就是......不幸的!我想我可以忍受缓存项目不总是被删除,虽然我不知道如何处理它可能会频繁发生的可能性。 – mjs