是否对承诺进行了惰性评估?
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
具有将始终评估的此步骤:
- Let completion be Call(executor, undefined, «resolvingFunctions.[[Resolve]], resolvingFunctions.[[Reject]]»).
其中 executor
是您传递给 Promise
构造函数的内容,Call 导致该代码为 运行。这一切都发生在 Promise
甚至返回到您的 p
变量之前。
正如James所说,保证函数会被调用。虽然这不能保证缓存条目被删除!
您必须检查承诺解析的值(true
如果缓存条目被删除,false
否则)。
下面的代码能保证输出HERE
吗?
var p = new Promise(() => console.log("HERE"))
(也就是说,如果从未调用 p.then(…)
对结果做某事,var p = new Promise(fn)
是否总是执行 fn
?)
更具体地说,在服务工作者的上下文中,如果我调用 Cache.delete()
但从不对 return 值调用 .then()
(或者我丢弃 return值),是否保证删除缓存条目?
是的,有保证。 specification of Promise
具有将始终评估的此步骤:
- Let completion be Call(executor, undefined, «resolvingFunctions.[[Resolve]], resolvingFunctions.[[Reject]]»).
其中 executor
是您传递给 Promise
构造函数的内容,Call 导致该代码为 运行。这一切都发生在 Promise
甚至返回到您的 p
变量之前。
正如James所说,保证函数会被调用。虽然这不能保证缓存条目被删除!
您必须检查承诺解析的值(true
如果缓存条目被删除,false
否则)。