如何从异步函数中获取值?

Pet*_*r M 1 javascript postgresql node.js async-await

我试图从本地数据库获取值,但我所能得到的只是“Promise{<Pending>}”。这是我在互联网上找到的代码。下面的代码应该返回一个包含表行的结果对象,但我只是得到了承诺。

const getFromDB = async() =>{
    return  await pool.query('SELECT * FROM services');
};
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 6

函数async总是返回一个承诺。该承诺的解析值是函数中的代码返回的任何值。因此,要从该承诺中获得价值,您可以使用await.then();

getFromDB().then(val => {
    // got value here
    console.log(val);
}).catch(e => {
    // error
    console.log(e);
});
Run Code Online (Sandbox Code Playgroud)

JavaScript 中没有免费的午餐。异步获取的值只能从函数异步返回(通过回调或 Promise 或其他类似的异步机制)。

或者,如果调用者本身是异步函数,那么您可以使用await

 async function someOtherFunc() {
     try {
         let val = await getFromDb();
         console.log(val);
     } catch(e) {
        // error
        console.log(e);
     }
 }
Run Code Online (Sandbox Code Playgroud)