如何判断页面上是否有任何待处理(未完成)的承诺

时间:2019-11-12 21:49:55

标签: javascript ecmascript-6 promise es6-promise

我的页面上有执行各种JavaScript承诺的各种组件。

在任何给定时间,我想知道仍有多少Promise待处理(或者至少在计数为0或> 0时)。

我已经看到Promise.all()被用作建议,但是这些承诺并不能同时全部兑现,因此不会一次调用Promise.all()

来创建它们

如果可能的话,我也想避免使用jQuery,并探索任何本机ES6解决方案。

2 个答案:

答案 0 :(得分:1)

Chrome has queryObjects(Promise)现在,虽然有点笨拙,但似乎至少可以解决您提出的字面问题:

> queryObjects(Promise)
undefined
Array(2)

扩展它记录的数组以检查每个promise的状态,或右键单击它并选择存储为全局变量以使其Promise.all()

我不了解Firefox的类似功能。

答案 1 :(得分:1)

要跟踪特定的一组承诺,可以使用类似以下的小助手:

 const promiseTracker = () => ({
     count: 0,
     get isActive() { return this.count === 0; },
     track(p) {
        this.count += 1;
        p.then(() => this.count -= 1, () => this.count -= 1);
     }
 });

可以用作:

 const networkCalls = promiseTracker();

 networkCalls.track(fetch(/*...*/));
 //...

 console.log(networkCalls.isActive); // ?