0
모든 이벤트를 듣고 루프를 만들었습니다. 문제는 내가 페이지를 열 때 그들 모두의 수업이 "white-text"라는 것입니다. 그러나 데이터가 show_inventory에서 오는 경우 클래스는 "magenta-text"여야합니다.Socket.IO 외부 배열에 액세스 할 수 없습니다.
작은 영어로 죄송합니다.
var events = {
log_stats: 'magenta',
show_inventory: 'magenta',
arrived_at_cluster: 'white',
arrived_at_fort: 'white',
softban_log: 'magenta',
softban_fix_done: 'white',
used_lucky_egg: 'white'
}
socket_io = io.connect('127.0.0.1:4000');
for (var k in events){
if (events.hasOwnProperty(k)) {
socket_io.on(k+':user', function (data) {
mapView.log({
message: "<p class='" + events[k] + "-text" + "'>" + data['data']['msg'] + "</p>",
color: events[k] + "-text"
});
});
}
}
mapView.log는()는 컴파일되고, 변수 k는 어레이 흰 색의 마지막 반복에 덮어 쓰기되어, 실행 시간에 의해, 동기 기능없는 경우 변경하여 확인할 수있다 배열 내의 마젠타에 대한 마지막 키의 값. 그러면 모든 텍스트가 마젠타 색으로 바뀝니다. 이 문제를 해결하려면 핸들러 함수를 작성하거나 간단한 setTimeout이 작업을 수행 할 수 있습니다. setTimeout (function (j) {/ ** 맵 로그 일 * /}, 100, k); '' '쓰고 있습니다. 오전 1시 38 분에 모바일에서 실행되므로 100 %로 생각하지 마십시오. 직접 응답을 기다리거나 다른 키워드로 문제를 계속 검색하십시오. – Robinlemon
이것은 'for' 루프 내부의 이벤트 핸들러와 같은 비동기 코드의 일반적인 문제입니다. 변수'k'는'.on()'이벤트가 실제로 발생했을 때 나중에 시간이되기를 원하지 않을 것입니다. 클로저 (closure)를 사용하고, '블록 (block) 범위 변수'를 얻도록 'let'으로 전환 할 수 있습니다. 동일한 문제를 논의하는 중복 질문이 수백 가지 있습니다. – jfriend00
나는 거기에 있지만 검색하는 방법을 모르겠지만 .. 그것은 비동기 코드에 관한 것입니다. 검색을 만들어 보겠습니다 –