所以我有一类带有函数的类,其中一个函数依赖于另一个。此类随模块一起导出。根据我发现的任何信息,我应该可以使用“ this”,但这会引发错误。
示例:
class Test{
test(){
console.log('hello');
}
dependentMethod(){
this.test();
}
}
module.exports = Test;
但是这会在节点中引发以下错误:
(node:69278) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'test' of undefined
(node:69278) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:69278) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'test' of undefined
但是,如果我将函数放在类之外,它将很好地工作。谁能解释为什么这失败了? :)
编辑:
这是server.js中的代码(针对示例进行了简化),该代码使用以下类:
const test = require(__dirname + '/server/Test');
const validator = async function(req, res, next){
const test = new test();
const serverTest = await test.dependentMethod();
next();
};
app.get('/Response/:id/:is/:userId/:hash', validator, async function (req, res, next) {
//does smth
}
单独使用也不起作用
const test = new Test();
app.get('/Response/:id/:is/:userId/:hash', Test.dependentMethod, async function (req, res, next) {
//Same error
}
答案 0 :(得分:2)
.center {
margin: auto;
width: 50%;
border: 3px solid green;
padding: 10px;
}
手动绑定此字符或使用箭头功能将 class Test{
test(){
console.log('hello');
}
let dependentMethod = ()=>{
this.test();
}
}
module.exports = Test;
绑定到类对象
答案 1 :(得分:1)
按预期工作。
在这里看看。您只需要纠正一些语法错误即可。
Test.js
class Test{
test(){
console.log('hello');
}
dependentMethod(){
this.test();
}
}
module.exports = Test;
Test1.js
const fileR = require('./Test.js');
const validator = async function(){
const fr = new fileR();
const serverTest = await fr.dependentMethod();
};
validator();
输出:
> hello
答案 2 :(得分:1)
伙计,您没有向我们展示真实的代码。
我觉得在现实生活中您正在使用test.dependentMethod
作为中间件。它实际上是使用独立的函数来失去上下文。这就是为什么您遇到错误Cannot read property 'test' of undefined
。
解决方案是使用test.dependentMethod.bind(test)
或 Edit 部分中的代码,在该部分中,您创建了单独的验证器函数并正确使用类实例。