JS: 비동기 실행 함수 에 매개 변 수 를 전달 합 니 다.

최근 에 만난 문 제 는 다음 과 같다.
var rcds = [
    'col_1',
    'col_2',
    'col_3',
    'col_4',
    'col_5',
    'col_6',
    'col_7',
]

var tasks = [];

for (var i = 0; i < rcds.length; i++) {
    var rcd = rcds[i]
    tasks.push(function(callback) {
        request('http://localhost:8080', function(err, response, body) {
            console.log(rcd);
            callback(null);
        });
    });
}

async.parallel(tasks, function(err) {
    if (err) {
        throw err;
    }
});

원래 실 행 된 결 과 는 출력 col_1 ~ col_7 이 었 는데 결 과 를 보 니 7 개 col_7 가 나 왔 습 니 다.생각해 보 니 변수 rcd 가 비동기 로 실 행 될 때 할당 되 었 을 것 입 니 다. SO 에서 이 대답 을 보 았 습 니 다. 안에서 언급 한 것 에 따라 그 순환 을 이렇게 바 꾸 면 됩 니 다.
for (var i = 0; i < rcds.length; i++) {
    var rcd = rcds[i]
    tasks.push(function(callback) {
        var rcd = this.rcd;
        request('http://localhost:8080', function(err, response, body) {
            console.log(rcd);
            callback(null);
        });
    }.bind({rcd: rcd}));
}

그 중에서 bind 를 사용 하여 외부 변수 rcd 의 값 을 리 셋 함수 에 연결 시 켰 고 다시 호출 할 때 변 하지 않 습 니 다.클 로 서 스 와 관련 이 있 는 것 같 습 니 다. 아직 모 르 겠 습 니 다. 뒤 돌아 보 세 요.
또한 이 물건 을 재현 하려 고 시도 할 때 다른 해결 방법 을 발견 하 는 것 은 바로 사용 forEach 이다.
rcds.forEach(function(rcd) {
    tasks.push(function(callback) {
        request('http://localhost:8080', function(err, response, body) {
            console.log(rcd);
            callback(null);
        });
    });
});

구체 적 인 원인 은 알 아 봐 야 지 ~

좋은 웹페이지 즐겨찾기