承诺是否懒惰评估?

时间:2016-02-03 12:32:51

标签: javascript promise lazy-evaluation service-worker

以下代码是否保证输出HERE

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

(即var p = new Promise(fn)是否始终执行fn如果永远不会调用p.then(…)来对结果执行某些操作?)

更具体地说,在服务工作者的上下文中,如果我调用Cache.delete()但从不在返回值上调用.then()(或者我丢弃返回值),则保证缓存条目是删除?

2 个答案:

答案 0 :(得分:5)

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

  
      
  1. 让完成为Call(执行者,未定义,«resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]»)。
  2.   

其中executor是您传递给Promise构造函数的地方,而Call会导致该代码正在运行。这一切都发生在Promise甚至返回到您的p变量之前。

答案 1 :(得分:2)

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

如果删除了缓存条目,则必须检查承诺解析的值(true,否则为false