Вызов двух Обетов друг в друга в Узле - PullRequest
0 голосов
/ 06 января 2019

Итак, у меня есть запрос MySQL, который мне нужно вызвать в другом запросе MySQL в следующем формате:

var sql = "some sql code";

    const queryResult = await new Promise((resolve) => {
      connection.query(sql, (err, rows, fields) => {

        // do some stuff here

        var secondSql = "Another sql command";

        const queryTwo = await new Promise((resolve) => {
          connection.query(secondSql, (err, rows, fields) => {

            // do some more stuff
            resolve(something);

        )});

         resovle(something);
      }
  )});

Но, когда я пытаюсь запустить это, я получаю сообщение об ошибке:

"errorMessage": "await is only valid in async function",
"errorType": "SyntaxError",

Я знаю, что это как-то связано с тем, что "await new Promise ((resol) => {") не является асинхронным, но как мне исправить это, чтобы он действительно выполнялся? Ранее я просто вставлял асинхронную функцию за пределы этого кода и назовите его там, где у меня второй SQL-запрос, но по какой-то причине в AWS Lambdas он не работает.

Может кто-нибудь показать мне другой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вы можете попробовать подход:

const sql1 = 'some sql code';
const sql2 = 'Another sql command';

const query1 = () => {
  return new Promise((resolve) => {
    connection.query(sql1, (err, rows, fields) => {
      resolve('something')
    });
  })
};

const query2 = () => {
  return new Promise((resolve) => {
    connection.query(sql2, (err, rows, fields) => {
      resolve('something')
    });
  })
};

[query1, query2].forEach(async request => {
  await request();
});
0 голосов
/ 06 января 2019

Чтобы ожидание работало, его нужно вызвать изнутри асинхронной функции. Попробуйте это:

var sql = "some sql code";

const queryResult = await new Promise((resolve) => {
  connection.query(sql, async (err, rows, fields) => {

    // do some stuff here

    var secondSql = "Another sql command";

    const queryTwo = await new Promise((resolve) => {
      connection.query(secondSql, (err, rows, fields) => {

        // do some more stuff
        resolve(something);

    )});

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