首页 > 解决方案 > 如何修复'它想在 var 中设置一个值,但它得到一个 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() 之前放置“等待”,我会收到下一个错误:


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

SyntaxError: await 仅在异步函数中有效


如果我将 .then 放在 db.getPendingKyc() 之后,我可以正确显示该值,但我想在不这样做的情况下将它放在 var 上。

¿ 我如何才能在不处理课堂外的承诺的情况下直接在 var 上与他一起工作的价值?

标签: node.jses6-promise

解决方案


你需要将你的函数调用包装在 async 函数中以使用 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);
 }

推荐阅读