Ваш вызов функции
Promise.all([ Model1.find({}), Model2.find({}) ], Model3.find({}))
// ^- First parameter -^ ^- second -^
Вы передали только два обещания функции Promise.all -
- первые два в виде массива -
[Model1.find({}), Model2.find({})]
.
Model3
в качестве второго параметра - Model3.find({})
.
Model3
передается, но игнорируется функцией - функция принимает только один параметр - первый, который должен быть повторяемым
Синтаксис
Promise.all(iterable);
Promise.all
просто запускает те обещания, которые определены в первом параметре, и вы получаете только результаты для Model1.find({})
и Model2.find({})
.
Вы думаете, что results[2]
является результатом Model3.find({})
, но это не так. В данном случае это массив, который содержит 2 элемента - результаты двух обещаний, которые передаются через array / iterable . Если вы хотите получить доступ к индексу массива, который больше length - 1
, вы получите undefined
.
Параметры функции
В JavaScript вы можете передать в функцию столько аргументов, сколько вам нужно, но параметры будут назначаться слева направо, а те аргументы, которые не вписываются в диапазон параметров, будут просто игнорироваться.
Посмотрите на приведенный ниже пример. Я передал 5 аргументов функции, но моя функция принимает только первые два, поэтому 3, 4, 5
просто игнорируются. У вас есть этот случай.
function foo(a, b) {
console.log(a, b);
}
foo(1, 2, 3, 4, 5);