javascript—在节点中互相调用两个承诺

qc6wkl3g  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(293)

因此,我需要在另一个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",

我知道这与“等待新的承诺((resolve)=>{”不是异步的有关,但是如何修复它以实际运行呢?我以前只想在这段代码之外插入一个异步函数,并在有第二个sql查询的地方调用它,但由于某些原因,这在aws lambdas中不起作用。
有人能告诉我另一种方法吗?

v2g6jxz6

v2g6jxz61#

您可以尝试以下方法:

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();
});
ia2d9nvy

ia2d9nvy2#

为了让await工作,必须从异步函数内部调用它。试试这个:

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);
  }
)});

相关问题