방금 클래스와 비동기를 실험하기 시작했습니다. 노드 버전 8.9.0 (LTS)을 사용하고 있습니다. 내가 console.log(this)
일 때 개체에 대한 참조 대신 undefined
이 표시됩니다.클래스/비동기 사용시 정의되지 않은 "this"얻기
subhandler.js Y 경우
class Handler {
constructor(props) {
this.defaultRes = {
data: successMessage,
statusCode: 200
};
}
async respond(handler, reply, response = this.defaultRes) {
console.log(this); // why is `this` undefined????
try {
await handler;
return reply(response.data).code(response.statusCode)
} catch(error) {
return reply(error);
}
}
}
class SubHandler extends Handler {
constructor(props) {
super(props);
this.something = 'else';
}
makeRequest(request, reply) {
console.log(this); // why is `this` undefined!!
// in this case, doSomeAsyncRequest is a promise
const handler = doSomeAsyncRequest.make(request.params);
super.respond(handler, reply, response);
}
}
module.exports = new SubHandler;
내부 그러면 동상 경로
const SubHandler = require('./subhandler');
server.route({
method: 'GET',
path: '/',
handler: SubHandler.makeRequest,
// handler: function (request, reply) {
// reply('Hello!'); //leaving here to show example
//}
});
원형 예
function Example() {
this.a = 'a';
this.b = 'b';
}
Example.prototype.fn = function() {
console.log(this); // this works here
}
const ex = new Example();
ex.fn();
가 어떻게'makeRequest'를 호출 : OU는
this
항상 생성자 bind its context,makeRequest
에서 인스턴스를 가리 키도록 싶어? – TimoHapi 라우트 핸들러에서 호출됩니다. https://hapijs.com/tutorials/routing – cusejuice
이런 종류의 문제에 대해서는 일반적으로 호출에'.bind (this) '가 없습니다. –