NodeJS Promise는 임의의 상황에서 정의되지 않은 값을 반환합니다.
P粉321584263
P粉321584263 2024-01-16 14:46:41
0
1
430

우선 이 질문에 이미 답변이 있다면 죄송하지만, 이런 종류의 질문을 검색해 봤는데 유용한 내용이 없습니다.

저는 mysql npm 패키지를 사용하여 데이터베이스를 쿼리하는 NodeJS 애플리케이션을 개발 중입니다. 나는 Promise의 도움으로 잘 작동하는 몇 가지 쿼리를 작성했습니다(SQL 모듈이 작동하는 방식이기 때문입니다). 쿼리 프로시저 함수 get_works(아래 정의)가 정상적으로 호출되면 문제가 없습니다. 그러나 Express Router에서 이 절차적 함수를 호출하면 이상한 동작이 발생합니다.

으아악

때때로 데이터베이스에 대한 쿼리에는 정의되지 않은 값이 없지만 정의되지 않은 값이 하나 있으면 이후의 모든 값도 정의되지 않습니다.

으아악

이것은 나의 약속 래퍼입니다:

으아악

그러나 다음과 같이 라우터 외부에서 이 함수를 호출하면 완벽하게 작동합니다.

으아악

뭔가 놓쳤나요? 원하는 결과를 얻을 수 있으므로 모든 쿼리가 정확하다고 생각합니다. 문제는 비동기/대기 처리에 있을 수 있습니다. 당신이 제공할 수 있는 모든 도움에 감사드립니다.

편집 1

@tromgy님의 제안을 바탕으로 Promise Wrapper를 다시 작성했습니다.

으아악

그러나 거부 절대 발생하지 않습니다(데이터베이스에 일치하는 데이터가 없으므로 이는 합리적입니다). 로그를 정리하기 위해 다른 데이터베이스 연결을 사용하여 유사한 요청에 대해 다른 라우터를 비활성화했습니다. 이 라우터를 제거하면 버그도 해결되었습니다. 이것이 어떻게 가능한지 모르겠습니다(어쩌면 변수가 전역으로 선언되어 있으므로 그런 종류의 문제를 찾아볼 것입니다).

P粉321584263
P粉321584263

모든 응답(1)
P粉063862561

그림과 같이 문제는 공유 루프 카운터입니다. 내 동료 중 한 명이 반복하기 전에 let 키워드를 추가하는 것을 잊어버렸기 때문에 for 루프가 값을 뛰어넘었습니다.

지금은 이 JavaScript 기능이 마음에 들지 않습니다. 도와 주셔서 감사합니다!

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿