HostPromiseRejectionTracker 操作是做什么的?

What does the operation HostPromiseRejectionTracker do?

看了ECMAScript规范中的HostPromiseRejectionTracker,还是不明白这是干什么的。它没有算法的具体步骤,所以目前代码中不清楚这个操作是如何工作的。

有一点很清楚,在执行调用拒绝函数的函数时创建新的Promise时会调用HostPromiseRejectionTracker。而第二次在第一次调用"then"方法时,HostPromiseRejectionTracker只在第一次调用"then"方法时被调用。

比如第一种情况出现在这样的代码中

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代码中的表现。

如果我没记错的话,HostPromiseRejectionTracker是一个抽象操作(JavaScript中的抽象操作是那些用于帮助规范JavaScript语言语义的那些。

For Eg. When JavaScript does Coercion, converting one value type to another; it happens at compile time for JavaScript. It aids the dynamic nature of JavaScript.

HostPromiseRejectionTracker一样,检查是否有handle操作Promise rejection 或者简单来说,我们是否使用 reject 操作来处理拒绝。

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

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