可以保证身体在下一行之前执行

时间:2018-09-25 09:29:19

标签: javascript typescript

我认为现在想得太早还为时过早,但是如果我有这样的事情:

const promise = someAsyncFunctionReturningAPromise().then(() => {
    cache.delete(promiseKey, promise); // LINE A
});
cache.set(promiseKey, promise); // LINE B

我是否需要担心A线在B线之前运行,还是可以保证B线先运行? cache.set是一种同步方法。

1 个答案:

答案 0 :(得分:3)

如果实现符合标准,则始终异步执行传递给then的回调。从Mozilla docs

  

处理函数(onFulfilled或onRejected)随后被异步调用( )(只要堆栈为空)。

或直接从Promise spec

  在执行上下文堆栈仅包含平台代码

之前,不得调用

onFulfilled或onRejected      

此处的“平台代码”表示引擎,环境和Promise实现代码。实际上,此要求可确保在事件循环回合之后调用onFulfilled和onRejected异步执行,然后使用新的堆栈。

鉴于回调始终被称为异步(即使已解决了承诺),因此set调用应在回调内部的delete delete调用之前进行。