【问题标题】:How to get data from inside a response function in Nods js [duplicate]如何从Node js中的响应函数内部获取数据[重复]
【发布时间】:2022-01-26 02:07:57
【问题描述】:

我是 Nodejs 和 Javascript 的新用户

我有这门课:

class Users {
    constructor() {
        this.all;
        this.selectAll();
    }
    async selectAll() {
      await connection.connect(() =>
            connection.query(`SELECT * FROM users`, (err, result) => {
                this.setData(result);
            }),
        );
    }

    setData(res) {
        this.all = res;
    }
}

我想从响应函数selectAll()获取数据结果; 例如:

var db = new Users();
console.log(db.all);

我希望db.all 给我selectAll() 的结果

有没有更好的办法?

【问题讨论】:

  • 您需要使用await,您正在尝试在收到响应之前访问属性。
  • 我做了它不起作用。给我同样的结果。谢谢
  • 您需要等待this.selectAll 呼叫以及在您的实例创建时。
  • @Leau 应该在哪里使用await
  • 不要在你的构造函数中调用<Users>.selectAll

标签: javascript node.js ecmascript-6


【解决方案1】:

您想等待this.selectAll,因为这是一个承诺。所以你需要确保它返回一个承诺。您可以使构造函数异步等待selectAllthis is not advised 可能不起作用。

就个人而言,我只会在创建用户实例后调用db.selectAll

可能是这样的:

文件:Users.js

export class Users {
    all = null

    async selectAll() {
        return connection.connect(() =>
            connection.query(`SELECT * FROM users`, (err, result) => {
                this.setData(result);
            })
        );
    }

    setData(res) {
        this.all = res;
    }
}

文件:index.js(或其他任何地方)

import { Users } from './Users.js'

// Somewhere else in your code in an async function:
const anotherPlace = async () => {
    const db = new Users();
    await db.selectAll();
    console.log(db.all)
}

【讨论】:

  • 谢谢。但我想轻松地从课外获取响应数据。我想在课堂上做
  • 我知道您希望在类之外使用最少的代码,但是在构造函数中使用 async await 是一种危险的做法,因此为了良好的实践,您真的应该在类外多调用一行填充all
  • @MikelWilliams 你可以让await db.selectAll() 也返回值;节省了一些字符,但要么在这里,要么使db.all 本身成为 Promise。您需要在User 之外处理这样一个事实,即您的数据库请求需要时间来完成并且结果无法立即获得,并且您不知道该值何时可用。承诺除外。
  • 在这种情况下,您可以查看异步 getter stackoverflow.com/a/39387979/5553768,但这非常可怕。我认为从长远来看,过度简化最终会使事情变得更加困难。
  • 不知道该告诉你什么,伙计,这比其他选择要好得多。也许从这里开始了解课程如何使我们受益:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多