Sli*_*lim 2 javascript node.js ecmascript-6
我创建了一个类,并且想在我的 Node.js 应用程序的路由中使用该方法。一个简单的代码片段描述了我在真实应用程序中遇到的类似问题。
myClass.js:
class MyClass {
static async sayHi(name) {
setTimeout(() => {
return `Hello ${name}`
}, 3000)
}
}
module.exports = new MyClass()
Run Code Online (Sandbox Code Playgroud)
索引.js:
const MyClass = require('./myClass');
console.log(MyClass.sayHi)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
undefined
Run Code Online (Sandbox Code Playgroud)
试:
console.log(MyClass.sayHi('Hello'))
Run Code Online (Sandbox Code Playgroud)
返回:
MyClass.sayHi is not a function
Run Code Online (Sandbox Code Playgroud)
您正在导出该类的一个实例 - 导入时,您有一个实例,而不是实际的类。调用导入的对象MyClass很令人困惑 - 也许可以调用它myClassInstance,这样可以清楚地表明问题是什么。
如果您有一个实例,并且想要调用该类的静态方法,请引用该.constructor属性。
如果你想异步返回一些东西,最好使用 Promise,然后调用.then调用sayHi来消费 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);Run Code Online (Sandbox Code Playgroud)
不需要静态方法为async,因为您已经显式返回了 Promise 。