gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:13:52 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com