Promise.all이 정의되지 않은 배열을 반환하고 조기에 해결되는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-31 21:19:02
원래의
692명이 탐색했습니다.

Why is Promise.all Returning an Undefined Array and Resolving Prematurely?

Promise.all 정의되지 않은 배열을 반환하고 조기에 해결

Promise.all은 Promise 객체의 배열을 받아들이고 모든 객체를 한 번에 해결하도록 설계되었습니다. 배열의 약속이 해결되었습니다. 그러나 제공된 코드에서는 Promise.all의 맵에 전달된 콜백 함수가 Promise를 반환하지 않기 때문에 문제가 발생합니다.

addText 함수 내에서:

<code class="javascript">function addText(queries) {
  return Promise.all(queries.map(function(query) {
    // Missing `return` statement causes undefined values in the array
    models.queries
      .findById(query.queryId, {
        raw: true,
        attributes: [ "query" ]
      })
      .then(function(queryFetched) {
        query.text = queryFetched.query;
        console.log(query);

        // Return the updated query as a resolved Promise
        return Promise.resolve(query);
      }, function(error) {
        // Return the error as a rejected Promise
        return Promise.reject(error);
      });
  }));
};</code>
로그인 후 복사

현재 상황은 다음과 같습니다. :

  1. 지도 콜백은 Promise를 반환하지 않으므로 결과 배열에 정의되지 않은 값이 포함됩니다.
  2. Promise.all은 정의되지 않은 값의 결과 배열을 즉시 확인합니다.
  3. 결과적으로 .then() 콜백은 Promises 배열 대신 정의되지 않은 값의 배열을 받습니다.

이 문제를 해결하고 Promise.all이 콜백의 모든 Promise 이후에만 해결되도록 하려면 해결된 경우 콜백은 명시적으로 Promises를 반환해야 합니다.

<code class="javascript">function addText(queries) {
  return Promise.all(queries.map(function(query) {
    // Added `return` statement to wrap the Promise in the callback
    return models.queries
      .findById(query.queryId, {
        raw: true,
        attributes: [ "query" ]
      })
      .then(function(queryFetched) {
        query.text = queryFetched.query;
        console.log(query);

        return Promise.resolve(query);
      }, function(error) {
        return Promise.reject(error);
      });
  }));
};</code>
로그인 후 복사

이제 지도 콜백은 Promise.all이 모든 Promise가 해결된 후에만 적절하게 처리하고 해결할 수 있는 Promises를 반환합니다.

위 내용은 Promise.all이 정의되지 않은 배열을 반환하고 조기에 해결되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!