Async/Await 错误返回 Promise { <pending> }

Async/Await Error returned Promise { <pending> }

请帮帮我,输出显示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());

输出:Promise { < pending> }

这很简单,你的函数是一个异步函数,也就是说它总是returns一个承诺。

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

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

async/await 是一个很好的小包装,围绕着一个承诺。内部是您要处理数据的地方,因为来自 async 函数的 return 被包装到一个 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()
  }
}

这将 return 与您上面的代码完全相同的结果,正如您所看到的,它实际上只结合了几个步骤。

关于 Promises 的更多信息很容易找到,但由于看起来您知道 then,所以知道 async 函数中的 await waits为 promise 结果并解压它。您仍然可以使用 then 和 catches 进行特定的调整和处理,但是 await waits 所以如果您需要的只是承诺的原始结果并且您想使用 try/catch 阻止你可以。

More information on async/await can be found on MDN