수색…
소개
비동기 콜백을 사용할 때는 범위를 고려해야합니다. 특히 루프 내부에있는 경우. 이 간단한 기사는하지 말아야 할 일과 간단한 작업 예제를 보여줍니다.
잘못된 코드, 왜이 키 사용이 버그로 이어질지 알아낼 수 있습니까?
var pipeline = {};
// (...) adding things in pipeline
for(var key in pipeline) {
fs.stat(pipeline[key].path, function(err, stats) {
if (err) {
// clear that one
delete pipeline[key];
return;
}
// (...)
pipeline[key].count++;
});
}
문제는 var 키의 인스턴스가 하나 밖에 없다는 것입니다. 모든 콜백은 동일한 키 인스턴스를 공유합니다. 콜백이 시작될 때 키가 증가하고 통계를받는 요소를 가리 키지 않을 가능성이 높습니다.
올바른 글쓰기
var pipeline = {};
// (...) adding things in pipeline
var processOneFile = function(key) {
fs.stat(pipeline[key].path, function(err, stats) {
if (err) {
// clear that one
delete pipeline[key];
return;
}
// (...)
pipeline[key].count++;
});
};
// verify it is not growing
for(var key in pipeline) {
processOneFileInPipeline(key);
}
새로운 함수를 생성함으로써 모든 콜백이 그들 자신의 키 인스턴스를 가지도록 함수 안에서 키 를 범위 지정합니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow