返回异步/等待错误Promise {<pending>}

时间:2019-03-12 05:15:53

标签: node.js async-await mysql2

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

输出:承诺{<未决>}

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

可以轻松找到有关Promises的更多信息,但是由于您似乎就知道了,因此知道await函数内的async等待 打开包装。您仍然可以使用then并捕获特定的适应和处理,但是await 等待,因此,如果您需要的只是承诺的原始结果,并且您想使用try/catch可以。

More information on async/await can be found on MDN