承诺是否懒惰评估?

mjs*_*mjs 1 javascript lazy-evaluation promise service-worker

以下代码是否保证输出HERE

var p = new Promise(() => console.log("HERE"))
Run Code Online (Sandbox Code Playgroud)

(也就是说,如果永远不会被调用来对结果做某事,那么var p = new Promise(fn)总会执行吗?)fnp.then(…)

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

Jam*_*rpe 5

是的,它是有保证的.具有此步骤的规范Promise将始终进行评估:

  1. 让完成为Call(executor,undefined,«resolvingFunctions.[[Resolve]],resolvingFunctions.[[Reject]]»).

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