下面的代码是否可以输出HERE
?承诺是懒惰评估?
var p = new Promise(() => console.log("HERE"))
(也就是说,不var p = new Promise(fn)
始终执行fn
如果p.then(…)
是从来没有所谓的做一些事情,结果?)
更具体地说,在服务人员的情况下,如果我叫Cache.delete()
,但从来没有打电话.then()
关于返回值(或者我扔掉返回值),是否保证删除缓存条目?
下面的代码是否可以输出HERE
?承诺是懒惰评估?
var p = new Promise(() => console.log("HERE"))
(也就是说,不var p = new Promise(fn)
始终执行fn
如果p.then(…)
是从来没有所谓的做一些事情,结果?)
更具体地说,在服务人员的情况下,如果我叫Cache.delete()
,但从来没有打电话.then()
关于返回值(或者我扔掉返回值),是否保证删除缓存条目?
是的,它是有保证的。该specification of Promise
具有该步骤,这将始终进行评估:。
- 令完成是调用(执行者,未定义,«resolvingFunctions [[解决],resolvingFunctions [[拒绝] ]»)。
其中executor
是你通过什么样的Promise
构造函数,Call导致代码正在运行。这一切发生在Promise
甚至返回到您的p
变量之前。
正如詹姆斯说的那样,保证函数将被调用。虽然这并不能保证缓存条目被删除!
您必须检查承诺分辨率的值(如果缓存条目被删除,则为true
,否则为false
)。
啊好点,那就是......不幸的!我想我可以忍受缓存项目不总是被删除,虽然我不知道如何处理它可能会频繁发生的可能性。 – mjs
或者简单地说:传递给'Promise'构造函数的executor函数'()=> console.log(“HERE”)总是立即执行。 – ftor
@ LUH3417是的,但OP想知道它是否有保证,因此引用和引用规范,说明它在哪里以及如何被调用,因此_why_它有保证。 –
没有冒犯,只是对不熟悉“spec说话”的用户 – ftor