【问题标题】:Async\Await with promise not working properlyAsync\Await with promise 无法正常工作
【发布时间】:2018-12-30 01:17:16
【问题描述】:

我有一个 Async 函数,我发送到另一个等待 Promise 解决的 Async 函数,但由于某种原因它没有等待 reslove。

Router.get("/openPage/:id",async(res,req)=>{
  var parms = res.getHeaderParamas();
  let select = OpenTemplate(parms);
  let theResualt = await select.then(data=>data);
  connection.end();
  res.returnJson(theResualt,"Success");
});


  async function OpenTemplate(header){
    return new Promise(res=>{
      var query = `SELECT * FROM streamingpages WHERE ID=${header.routerParamas.id}`;
      connection.connect((err)=>{res(err)});
      connection.query(query,(error, results, fields)=>{
          if(error) res(error)
          console.log(results);
          res(results);
      });
    })

}

我不明白我做错了什么??

【问题讨论】:

  • let theResualt = await OpenTemplate(parms);。另外,从OpenTemplate 中删除async,因为它已经返回了一个Promise。 async 意味着只要 inside 块有任何await,它就会成为用户,否则它会强制函数无论如何返回Promise,但这不是你的情况,因为你已经返回了一个.
  • connection.connect((err)=>{res(err)}); 一旦建立连接,承诺就会解决

标签: javascript async-await es6-promise


【解决方案1】:

在这一行:

 connection.connect((err)=>{res(err)});

您在建立连接时解决承诺,而不是在完成查询时。你不能多次解决一个 Promise。

 function makeQuery(connection, query) {
  return new Promise((resolve, reject) => {
    connection.connect(error => {
      if(error) return reject(error);
      connection.query(query, (error, results, fields) => {
        if(error) return reject(error);

        console.log(results);
        resolve(results);

        connection.close(); // actually you should open the connection to the db once ...
      });
    });
  });
}

const openTemplate = header =>
  makeQuery(connection, `SELECT * FROM streamingpages WHERE ID=${header.routerParamas.id}`); // MYSQL INJECTION POSSIBLE!!!!

Router.get("/openPage/:id",async(res,req)=>{
 var params = res.getHeaderParams();
 const result = await openTemplate(parms);
 res.returnJson(result, "Success");
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2019-07-15
    • 1970-01-01
    • 2019-09-16
    • 2020-08-21
    相关资源
    最近更新 更多