mongoose find не ожидает завершения

#javascript #node.js #mongodb #mongoose

#javascript #node.js #mongodb #мангуст

Вопрос:

Почему этот код не дожидается завершения поиска, а затем возвращается? Он возвращает пустой массив до завершения поиска.

 const findAllUsers = () => {
    const channelNames = [];

    ATwitchStreamer.find({}, (err, res) => {
        console.log(res)
        res.forEach((user) => {
            channelNames.push(user.username);
        });
    }).then(r =>
        return channelNames);
    return channelNames;
};
 

Ответ №1:

метод find является асинхронной функцией, поэтому вы можете использовать async / await

 const findAllUsers = async() => {
    const channelNames = [];

    await ATwitchStreamer.find({}, (err, res) => {
        console.log(res)
        res.forEach((user) => {
            channelNames.push(user.username);
        });
    })
    return channelNames;
};
 

Ответ №2:

ATwitchStreamer.find это обещание. Вы решаете это, возвращая цепочку обещаний:

 return ATwitchStreamer.find(...)