我查看了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代码中说明其含义,目的和体现。
答案 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
处理程序) 。如果通知没有失效,它将通知开发人员有关错误。