ну, в общем, вы должны думать, что он попытается запустить все и весь код, который должен ждать, чтобы быть решенным, не остановит процесс запуска всего кода.
Таким образом, глядя на ваш код, мы можем увидеть следующее:
1) определите arr
как undefined
и войдите в коммутатор.
2) в операторе switch у нас есть await
, поэтому он будет ждать (но не остановит выполнение другого кода, потому что он не принадлежит тому же оператору), он разрешится позже.
3) печатает сообщение debug
4) возвращает undefined
, поскольку ожидание внутри коммутатора не разрешено.
5) однажды утверждение будет решено, но вы ничего не можете с этим поделать.
Примером может быть следующий.
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
console.log('calling');
var result = await resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
asyncCall();
так что вы можете сделать в вашем случае следующее:
function resolveInnerFunct() {
return new Promise(resolve => {
let promises = [];
var random = Math.floor(Math.random() * count);
for (let i = 0; i < 2; i++) {
promises.push(SecSolution.findOne().skip(random).lean())._id));
}
Promise.all(promises).then(values=> {return resolve(values)};
});
}
async function asyncCall() {
console.log('calling');
let arr;
switch (deckIdentifier) {
case 102:
// this will wait until the resolveInnerFunct resolves.
arr = await resolveInnerFunct();
debug("this wont get printed before the other message")
break;
}
debug("this gets printed first");
return arr;
}
asyncCall();