Имея следующий кусок кода ...
const array = [
Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)
];
Array.prototype.then = function () {
console.log('Why does this gets triggered?');
}
Promise.all(array)
.then(result => console.log(result))
Почему Promise.all()
сама вызывает мою .then()
прото функцию в массиве?
Конечно, она должна вызывать .then()
для каждого из элементов в массиве. Это очевидно. Но какова цель сделать это над самим массивом?
Такое поведение происходит на V8
Для рассмотрения: Если вы измените Promise.all()
до Promise.race()
этого не происходит.
Я не говорю, что это ошибка. Я просто хочу понять причину. Если вы можете процитировать спецификацию EcmaScript в ответе, я был бы очень признателен.
Обновление: Я знаю, Promise.all()
возвращает массив, но обернутый в обещание. Это тоже очевидно. Если вы удалите .then()
как ...
Promise.all(array)
, он все равно выполнит метод .then()
.