如何解决“它想在var中设置一个值,但是得到一个Promise {<pending>}”

时间:2019-10-13 07:51:54

标签: node.js es6-promise

(对不起我的英语,但是我正在学习:D)

伙计们,我是node和js的初学者,我想在db类上创建一个“ getPendingKYC”函数,但是当我执行该函数时,我总是收到Promise {},但是我想直接接收查询结果,而不用.then在我的var上管理承诺。 我只想在调用函数时在类外的var上获取函数结果的值。

//

//这是脚本页面

const { Client } = require('pg');


class Db {
    constructor() {
        this.client = this.dbConnect();
    }

    dbConnect() {
        return new Client({
            user: 'xxxxxxxxxxx',
            host: 'xxxxxxxxxxx',
            database: 'xxxxxxxxxxx',
            password: 'xxxxxxxxxxx',
            port: 'xxxxxxxxxxx'
        });
    }

    async getPendingKyc() {
        this.client.connect();
        let data = await this.client.query('SELECT * FROM users')
        this.client.end();
        return data.rowCount;
    };
};

const db = new Db();
let data = db.getPendingKyc();
console.log(data);

如果我在db.getPendingKyc()之前放置“ await”,则会收到下一个错误:


让数据=等待db.getPendingKyc();            ^^^^^

SyntaxError:等待仅在异步功能中有效


如果我将.then放在db.getPendingKyc()之后,则可以正确显示该值,但我希望将其放在不执行此操作的var中。

¿我该如何做才能直接在var上获得与他一起工作的价值,而无需在课堂外处理承诺?

2 个答案:

答案 0 :(得分:0)

当没有异步功能时,您可以...

const db = new Db();
db.getPendingKyc().then(function(data) {
    console.log(data);
}

答案 1 :(得分:0)

您需要将函数调用包装在异步函数中才能使用await 因此您的代码应类似于

(async()=>{
const db = new Db();
let data = await db.getPendingKyc();
console.log(data);
})()

或者您可以使用then 所以你可以这样

const db = new Db();
db.getPendingKyc().then((data)=>{
 console.log(data);
 }