我创建了一个类,我想在我的 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/