node.js - получить значение обещания - PullRequest
0 голосов
/ 06 апреля 2020
let { errors } = otherValdations(data);

withDB(async (db) => {
    return Promise.all([

       ..code...

    ]).then(() => {
        return {
            errors,
            isValid: isEmpty(errors),
        }
    })
}, res).then((result) => {
    console.log(result);
})

Как я могу получить переменную 'result', равную значению объекта, возвращенного в promise.all? Это код для функции с DB:

const withDB = async (operations, res) => {
try {
    const client = await MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true });
    const db = client.db('app');

    await operations(db);

    client.close();
  } catch (error) {
    res.status(500).json({ message: 'Error connecting to db', error});
  }
};

Ответы [ 2 ]

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

Вам нужно изменить withDB(), чтобы он возвращал нужное вам значение:

const withDB = async (operations, res) => {
    try {
        const client = await MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true });
        const db = client.db('app');

        let result = await operations(db);

        client.close();
        return result;
    } catch (error) {
        res.status(500).json({ message: 'Error connecting to db', error});
        throw error;
    }
}

В вашем обработчике catch() вам также нужно сделать что-то, чтобы ваш вызывающий код мог различать guish путь ошибки, когда вы уже отправили ответ об ошибке в случае, когда вы решили со значением. Я не знаю точно, как вы хотите, чтобы это работало, но я вставил throw error, чтобы он отклонил возвращенное обещание, и вызывающий абонент может увидеть это.

Из вашей обработки ошибок я заметил, что вы предполагаем, что все возможные ошибки вызваны ошибкой подключения к БД. Это не тот случай, здесь. Если operations(db) отклоняет, это также поразит ваш catch.

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

Promise.all возвращает массив с результатами. Таким образом, вам нужно либо l oop просмотреть результаты, либо получить к ним доступ напрямую, указав индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...