HostPromiseRejectionTracker的操作是做什么的?

时间:2019-11-18 03:10:37

标签: ecmascript-6 es6-promise ecmascript-next

我查看了ECMAScript规范中的HostPromiseRejectionTracker,但仍然不明白它在做什么。它没有算法的特定步骤,因此尚不清楚此操作在当前代码中如何工作。

很明显,在执行调用拒绝函数的函数时,在创建新的Promise时会调用HostPromiseRejectionTracker。第二次是第一次调用“ then”方法时,只有在第一次调用“ then”方法时才调用HostPromiseRejectionTracker。

例如,第一种情况发生在此类代码中

var promiseA = new Promise((resolve, reject) => {
        setTimeout(() => reject(new Error("Text of Error")), 3000)
});

第二种情况发生

var promiseA = new Promise((resolve, reject) => {
        setTimeout(() => reject(new Error("Text of Error")), 3000)
});
promiseA.then();

但我不知道HostPromiseRejectionTracker的确切功能。谁了解此操作的作用,并在有效的ECMAScript代码中说明其含义,目的和体现。

2 个答案:

答案 0 :(得分:2)

这是实现在承诺生命周期中可以执行自定义操作的一个挂钩。顾名思义,它用于跟踪承诺拒绝(以及then方法安装拒绝处理程序),并用于实现unhandledrejection events in browsers和node.js的机制。如果主机不选择实施任何拒绝跟踪,则这只是无操作,并且不会执行任何操作。

答案 1 :(得分:0)

如果我没记错的话,HostPromiseRejectionTracker抽象 操作(JavaScript中的抽象操作是用于辅助语义规范的操作。 JavaScript语言)。

  

例如当JavaScript执行 Coercion 时,将一种值类型转换为另一种值类型;它发生在JavaScript的编译时。它有助于JavaScript的动态特性。

以与HostPromiseRejectionTracker相同的方式,它检查是否有针对{strong> 承诺拒绝handle操作,还是简单的方法?是否使用reject操作来处理拒绝。

如果我们没有定义reject操作,那么它将寻找下一个handler,是否使先前的错误通知无效(在我们的例子中,它将是then处理程序) 。如果通知没有失效,它将通知开发人员有关错误