【问题标题】:Async/Await Error returned Promise { <pending> }异步/等待错误返回 Promise { <pending> }
【发布时间】:2019-08-02 12:27:27
【问题描述】:

请帮助我,输出显示 1 或 0 的方式是什么

const checkDataFail = async () => {
    const result = await conn.promise().query("SELECT * FROM data WHERE id = '10'")
        .then( ([rows,fields]) => {
        return rows && rows.length ? "1" : "0";
    })
    .catch(console.log);

    return result;
}

console.log(checkDataFail());

输出:承诺 { }

【问题讨论】:

  • 如果您将await 放在前面,为什么还要在then() 上使用then()?去return result &amp;&amp; result.length ? "1" : "0";

标签: node.js async-await mysql2


【解决方案1】:

很简单,你的函数是一个异步函数,也就是说它总是返回一个promise。

在输出到控制台之前,您必须 await 响应。

(async function() {
    console.log(await checkDataFail())
})()

【讨论】:

    【解决方案2】:

    async/await 是一个很好的小包装,围绕着一个承诺。内部是您想要处理数据的地方,因为来自async 函数的返回被包装到一个promise 中。如果您真的想使用async/await,请在其中执行您的承诺:

    const checkDataFail = async () => {
      try {
        const [rows, fields] = await conn.promise().query('...'); // Promise#then()
        return rows && rows.length ? "1" : "0";
      } catch(e) {
        console.error(e); // Promise#catch()
      }
    }
    

    这将返回与您上面的代码完全相同的结果,并且您可以看到它实际上只结合了几个步骤。

    可以很容易地找到有关 Promise 的更多信息,但既然您似乎知道那时,请知道 awaitasyncfunction 中等待 承诺结果并解压它。你仍然可以使用 then 和 catchs 来进行特定的调整和处理,但是 await waits 所以如果你需要的只是 Promise 的原始结果并且你想使用 try/catch 块你可以。

    More information on async/await can be found on MDN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-06
      • 2018-11-17
      • 2020-03-04
      • 2021-03-17
      • 2019-12-08
      • 2020-07-09
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多