是否对承诺进行了惰性评估?

Are promises lazily evaluated?

下面的代码能保证输出HERE吗?

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

(也就是说,如果从未调用 p.then(…) 对结果做某事,var p = new Promise(fn) 是否总是执行 fn?)

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

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

  1. Let completion be Call(executor, undefined, «resolvingFunctions.[[Resolve]], resolvingFunctions.[[Reject]]»).

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

正如James所说,保证函数会被调用。虽然这不能保证缓存条目被删除!

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