我认为现在想得太早还为时过早,但是如果我有这样的事情:
const promise = someAsyncFunctionReturningAPromise().then(() => {
cache.delete(promiseKey, promise); // LINE A
});
cache.set(promiseKey, promise); // LINE B
我是否需要担心A线在B线之前运行,还是可以保证B线先运行? cache.set
是一种同步方法。
答案 0 :(得分:3)
如果实现符合标准,则始终异步执行传递给then
的回调。从Mozilla docs
处理函数(onFulfilled或onRejected)随后被异步调用( )(只要堆栈为空)。
或直接从Promise spec
在执行上下文堆栈仅包含平台代码 之前,不得调用onFulfilled或onRejected
此处的“平台代码”表示引擎,环境和Promise实现代码。实际上,此要求可确保在事件循环回合之后调用onFulfilled和onRejected异步执行,然后使用新的堆栈。
鉴于回调始终被称为异步(即使已解决了承诺),因此set
调用应在回调内部的delete delete
调用之前进行。