为什么即使所有的诺言都解决了,这个Promise.all()还是无法解决?

时间:2019-10-04 23:14:49

标签: javascript promise es6-promise

由于某些原因,即使所有的承诺都已通过验证,Promise.all()也不触发。这怎么可能发生,或者我该如何进一步调试呢?

promise本身正在调用具有回调的第三方库函数,并在回调中对其进行解析。

delimiter //
CREATE TRIGGER stock_update BEFORE UPDATE ON `stock` 
       FOR EACH ROW
       BEGIN
           IF NEW.`quantity` < 1 THEN #belongs to alias A
               UPDATE `ps_product` B
               SET B.`visibility` = 'none'
               WHERE id_product = OLD.id_product;  #Should be the id_product of A alias
           ELSEIF NEW.quantity > 0 THEN
               UPDATE `ps_product` C
               SET C.`visibility` = 'both'
               WHERE id_product = OLD.id_product; #//Should be the id_product of A alias
           END IF;
       END;//
delimiter ;

这是控制台输出:

let promises = [];

for (let i = 0; i < payments.length; i++) {

    let p = new Promise((resolve, reject) => {

        setTimeout(() => {
            this.lib.createToken(result => {
                if (result.error) {
                    reject(false);
                    console.log('rejected', result.error.message);
                } else {
                    resolve(result.token);
                    console.log('resolved', result.token);
                }
            });
        }, (500 * i));

    });

    promises.push(p);
}

console.log('payment promises: ', promises.length);

Promise.all(promises).then(results => {

    console.log('promise all reached', results);

}).catch(reason => {
    console.log(reason);
});

另一个奇怪的事情是,这种情况只是间歇性发生的……大约1/10次。

编辑:

如果我在Promise.all()上设置一个断点,则确实会显示诺言:ZoneAwarePromise的Array(2)。有趣的是,使用断点并在之后恢复时,它将断断续续地挂起100%的时间,而不是断断续续地没有断点。

0 个答案:

没有答案