javascript - Class.method 不是使用 ES6 类的函数

标签 javascript node.js ecmascript-6

我创建了一个类,我想在我的 node.js 应用程序的路由中使用该方法。 一个简单的代码片段描述了我在真实应用中遇到的一个类似问题。

我的类.js:

class MyClass {
    static async sayHi(name) {
        setTimeout(() => {
            return `Hello ${name}`
        }, 3000)
    }
}

module.exports = new MyClass()

index.js:

const MyClass = require('./myClass');
console.log(MyClass.sayHi)

我遇到了这个错误:

undefined

尝试:

console.log(MyClass.sayHi('Hello'))

返回:

MyClass.sayHi is not a function

最佳答案

您正在导出该类的一个实例 - 导入时,您有一个实例,而不是实际的类。调用导入的对象 MyClass 令人困惑 - 也许可以将其称为 myClassInstance,这样可以清楚地说明问题所在。

如果您有一个实例,并且想调用该类的静态方法,请引用 .constructor 属性。

如果你想异步返回一些东西,最好使用 Promise,然后在 sayHi 调用上调用 .then 来消费 Promise:

class MyClass {
  static sayHi(name) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(`Hello ${name}`);
      }, 1000);
    });
  }
}

const myClassInstance = new MyClass();
// module.exports = myClassInstance;

// index.js:

// const myClassInstance = require('./index');
myClassInstance.constructor.sayHi('foo')
  .then(console.log);

不需要静态方法是async,因为你已经显式地返回了一个 Promise。

关于javascript - Class.method 不是使用 ES6 类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56577976/

相关文章:

javascript - 如何通过按钮管理全屏iframe

javascript - 显示/隐藏 iPad 的功能切换

javascript - 如何在Javascript表中添加动态序列号

Javascript (ES6) 将值设置为普通对象

javascript - 使用嵌套的 forEach 循环将对象推送到数组

reactjs - Redux 操作不调用 reducer

php - 读取并解析 cookie

node.js - Node js 返回 mongodb 查找结果

javascript - 如何获取网站的中间值(网页抓取)

node.js - 如何让 Node.js 和 Glassfish 服务器监听同一个端口?