module.exports = {
async test (params) {
const {
result,
objects = [],
NextContinuationToken
} = await storage.test(params);
if (result) {
if (NextContinuationToken) {
const {
objects: recursiveObjects = [],
} = await this.test({ ...params, continuationToken: NextContinuationToken });
return {
objects: objects.concat(recursiveObjects)
}
}
}
return {
objects
}
},
}
위 코드에서 this.test 재귀를 호출하려고 하면 this.test 가 undefined로 나와 에러가 발생한다
node 에서는 function 함수와 화살표 함수의 this 가 가르키는것이 다르다
function : module.exports
화살표 : global
위 내용을 가르키고 있어 나는 위 내용을 인지하고 있어 function 함수로 작성하여 this를 사용하였지만
undefined가 나왔다
이유는 this의 바인딩 문제다 기본적으로 this는 호출한 객체를 가르킨다
this.test 를 실행했다면 이 코드를 실행한 함수가 곧 this가 된다.
다른 속성 함수에서 test 함수를 실행했을때는 그 속성 함수는 module.exports 의 속성함수 므로
this 가 module.exports를 가르킨다
하지만 test 함수 내에서 this.test를 호출 시 호출 객체는 test 함수다
test 함수내 test 라는 함수를 가지고 있지않아 그래서 undefined 가 나왔다
test 함수는 module.exports 의 속성 함수이므로 module.exports.test 로 호출해야 undefined 가 나오지 않는다.
module.exports = {
async test (params) {
const {
result,
objects = [],
NextContinuationToken
} = await storage.test(params);
if (result) {
if (NextContinuationToken) {
const {
objects: recursiveObjects = [],
} = await module.exports.test({ ...params, continuationToken: NextContinuationToken });
return {
objects: objects.concat(recursiveObjects)
}
}
}
return {
objects
}
},
}