Код ожидания не выполняется после ожидания, даже если я выполню обещание агрегации - PullRequest
0 голосов
/ 13 апреля 2020

Я некоторое время боролся с обещаниями и пока не смог найти решения своей проблемы.

Что я хочу сделать;

Я выбираю агрегированные данные из MongoDB и присваиваю их значения объекту класса. Вот фрагмент кода агрегации:

 static get(email: BaseUser['email']) {
    const query = { email: email }
    return new Promise(resolve => {
        const data = this.model.aggregate([
            {
                $match: query
            }, {
                $project:
                {   // Get the last element of the array which is previous week's data
                    d1: { $arrayElemAt: ["$data.myData1", -1] },
                    d2: { $arrayElemAt: ["$data.myData2", -1] },
                    d3: { $arrayElemAt: ["$data.myData3", -1] },
                    email: email
                }
            }
        ])
        resolve(data)
    })
}

, и здесь я вызываю функцию выше;

  private static async set(email: string) {
    console.log(1)
    const data = await MongooseBusiness.get(email); // below code won't work
    console.log(data, 'data')
    const oldCumulativeCounts = data[0];
    console.log(4)
    return new Promise(resolve => resolve('a piece of data'));
}

Как я уже говорил в предыдущем комментарии, код, который после ждать не работает. Как будто его там даже нет. Даже если я разрешу обещание в функции get. Любая помощь?

1 Ответ

0 голосов
/ 13 апреля 2020

Насколько я понимаю, this.model.aggregate() возвращает Обещание, что означает, что ваш метод get возвращает Promise<Promise<...>>.

Вы можете просто вернуть this.model.aggregate() вместо new Promise:

 static get(email: BaseUser['email']) {
    const query = { email: email }
    return this.model.aggregate([
            {
                $match: query
            }, {
                $project:
                {   // Get the last element of the array which is previous week's data
                    d1: { $arrayElemAt: ["$data.myData1", -1] },
                    d2: { $arrayElemAt: ["$data.myData2", -1] },
                    d3: { $arrayElemAt: ["$data.myData3", -1] },
                    email: email
                }
            }
        ])
}
...