우선 이 질문에 이미 답변이 있다면 죄송하지만, 이런 종류의 질문을 검색해 봤는데 유용한 내용이 없습니다.
저는 mysql npm 패키지를 사용하여 데이터베이스를 쿼리하는 NodeJS 애플리케이션을 개발 중입니다. 나는 Promise의 도움으로 잘 작동하는 몇 가지 쿼리를 작성했습니다(SQL 모듈이 작동하는 방식이기 때문입니다). 쿼리 프로시저 함수 get_works
(아래 정의)가 정상적으로 호출되면 문제가 없습니다.
그러나 Express Router에서 이 절차적 함수를 호출하면 이상한 동작이 발생합니다.
때때로 데이터베이스에 대한 쿼리에는 정의되지 않은 값이 없지만 정의되지 않은 값이 하나 있으면 이후의 모든 값도 정의되지 않습니다.
으아악이것은 나의 약속 래퍼입니다:
으아악그러나 다음과 같이 라우터 외부에서 이 함수를 호출하면 완벽하게 작동합니다.
으아악뭔가 놓쳤나요? 원하는 결과를 얻을 수 있으므로 모든 쿼리가 정확하다고 생각합니다. 문제는 비동기/대기 처리에 있을 수 있습니다. 당신이 제공할 수 있는 모든 도움에 감사드립니다.
@tromgy님의 제안을 바탕으로 Promise Wrapper를 다시 작성했습니다.
으아악그러나 거부 절대 발생하지 않습니다(데이터베이스에 일치하는 데이터가 없으므로 이는 합리적입니다). 로그를 정리하기 위해 다른 데이터베이스 연결을 사용하여 유사한 요청에 대해 다른 라우터를 비활성화했습니다. 이 라우터를 제거하면 버그도 해결되었습니다. 이것이 어떻게 가능한지 모르겠습니다(어쩌면 변수가 전역으로 선언되어 있으므로 그런 종류의 문제를 찾아볼 것입니다).
그림과 같이 문제는 공유 루프 카운터입니다. 내 동료 중 한 명이 반복하기 전에
let
키워드를 추가하는 것을 잊어버렸기 때문에 for 루프가 값을 뛰어넘었습니다.지금은 이 JavaScript 기능이 마음에 들지 않습니다. 도와 주셔서 감사합니다!