Node.js 응용 프로그램을 사용하여 변수 범위를 설정하는 데 문제가 있습니다. 일반적으로 함수 내에서 변수 범위가 작동하는 방식을 알고 있습니다 (이 경우 익명 콜백 함수).자바 스크립트에서 변수 범위를 통해 변수 유지하기
내가 싸우고있는 것은 익명 콜백의 체인/구멍을 통해 vairables를 유지하는 가장 좋은 방법은입니다. 일반적으로 함수에 변수를 전달할 수 있지만 mongoose (mongodb ORM)를 사용하기 때문에 직접 변수를 전달할 수 없으므로 각 단계에서 변수를 반복해서 정의해야합니다. 콜백.
가장 좋은 방법은 무엇입니까? 다음은
가 나는 트위 팅을 위해 그들을 사용할 시간에 의해 정의되지 않은 받고 변수를 결국 내 코드입니다 :var userBid = tag.user;
User.find({id: userAid}, function(err, userA){
if (err) {console.log("Error getting user A for tweeting ", err)}
else {
var userAName = userA.twitter.screenName;
var userBid2 = userBid;
User.find({id: userBid2}, function(err, userB){
if (err) {console.log("Error getting user B for tweeting ", err)}
else {
var action = "@"+ userAName + " just claimed some of @" + userB.twitter.screenName + " 's turf as their own.";
twitterClient.updateStatus(action, function(err, resp){
if (!err) {
console.log("Tweeted: ", action);
} else {
console.log("TwitBot error:", err);
}
});
}
});
}
});
확실히이 문제를 처리하는 더 나은 방법이 ... 어떤 도움을 많이 고맙습니다.
이 아니다 PHP/C/자바를 수행하여 익명 함수에
userAName
변수를 카레했습니다! 변수를 전달할 필요가 없습니다. 스코프 조회 체인을 통해 항상 사용할 수 있습니다 ... 범위의 최상위 레벨에서 한 번만 선언하면 (지금까지와 마찬가지로) 해당 함수 내부에서 액세스 할 수 있습니다. ** 토끼 구멍을 통과 할 필요가 없습니다 !! ** –음 ... 그렇다면 내 변수가 정의되지 않은 이유는 무엇입니까? 그리고 바인드/카레닝의 이유는 @Raynos의 답변이 – Christopher
이하인 것을 의미합니다. userBid가 올바르게 정의되어 있으며 쿼리 내에서 액세스 할 수 있어야합니다. 함수 외부에 정의되어 있으므로 함수 내부에서 볼 수 있습니다. 변수가 실제로 올바르게 정의되고 tag.user가 정의되지 않았는지 확인하십시오. 간단한 console.log (userBid)가이 질문을 해결해야합니다. – Jorre