Node.js가있는 작은보고 도구를 만들고 있는데 자바 스크립트의 범위 지정 문제가 있습니다. 함수를 호출하고 데이터베이스 쿼리에서 도시와 배열을 반환해야합니다. 여기 함수.Js 함수가 반환하지 않음
function queryBuilderZone() {
var includedCities = new Array();
q = heredoc(function(){/*
SELECT majlis.MajlisId
FROM majlis
WHERE majlis.ZoneId = -ZONE-
*/});
q = q.replace(/-ZONE-/g, inZone);
connection.query(q, function(err, rows, fields) {
if (err) throw err;
var rowsLentgh = rows.length;
for (var i = 0; i < rowsLentgh; i++) {
includedCities.unshift(rows[i].MajlisId);
};
console.log(includedCities); // <-- output correct: ['...', '....']
});
connection.end();
console.log(includedCities); // <-- output wrong: []
return includedCities;
}
이 어디에 문제가 왜이 함수는 배열 includedCities
의 요소를 반환하지 않습니다 메인 프로그램
includedCities = queryBuilderZone();
console.log(includedCities); // <-- output wrong: []
에서 내 전화입니까?
그리고 connection.query
의 범위에서 올바른 값과 예상 값을 보여줍니다.
그런데 쿼리를 작성하고 쿼리에서 자리 표시자를 바꾸려면 mysql
모듈을 사용하고 있습니다.
표준 비동기 사례입니다. 콜백이 완료되기 전에 "잘못된"콘솔 로그가 발생합니까? "includeCities"는 함수의 로컬 변수입니다. – npup
이것은 나에게 이것이 범위 지정 문제라고 생각합니다. 나는 node.js 사람이 아니지만 includeCities는 전역 범위에없는 queryBuilderZone 함수 내에서 정의됩니다. 함수 위로 전역 범위로 이동하십시오. –
@rontornambe 이것은 작은 자습서를 읽을 시간을 찾지 못한 node.js 초보자의 전형적인 문제입니다. – hgoebl