Выполнение нескольких запросов по маршруту Nodejs - PullRequest
0 голосов
/ 14 октября 2019

У меня есть пост-маршрут Node.js, в котором я выполняю несколько запросов последовательно с async / await.

router.post("/foo", async (req, res) => {
    const qr1 = "str1";
    await db.query(qr1); // Works fine
    const qr2 = "str2";
    await db.query(qr2); // Works fine
    const qr3 = "str3";
    await db.query(qr3, async (err, result) => {
        if (err) {
            console.log(err);
        }
        if (result.length > 0) {
            // Required data is received – That part works
            // do something and continue to step 4
        }
    });
    // step 4 – Never gets here
});

Все запросы, которые выполняют манипуляции с таблицами, т.е. удаляют, вставляют и т. Д., Работают нормально. Как только я получаю запрос на выборку, я получаю необходимые данные, но мне нужно перейти к следующему шагу, который не происходит. Я знаю, что могу выполнить то, что мне нужно, вложив шаг 4 в шаг 3, но я хотел бы знать, есть ли другой способ сделать это.

1 Ответ

1 голос
/ 14 октября 2019

Проблема, с которой вы столкнулись, заключается в том, что комментарий // шаг 4 выполняется немедленно, тогда как асинхронный код ошибки выполняется асинхронно при выполнении запроса 3. Вот ваш код, исправленный для достижения вашего результата:

router.post("/foo", async (req, res) => {
try {
  const qr1 = "str1";
  await db.query(qr1); // Works fine
  const qr2 = "str2";
  await db.query(qr2); // Works fine
  const qr3 = "str3";
  const q3Result = await db.query(qr3);
  console.log('step 4');
  // step 4 – Should work fine
}
catch(err) {
  console.log(err);
}

});
...