由于某些原因,即使所有的承诺都已通过验证,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%的时间,而不是断断续续地没有断点。