>  기사  >  웹 프론트엔드  >  Promise.all()이 정의되지 않은 값 배열로 인해 조기에 해결되는 이유는 무엇입니까?

Promise.all()이 정의되지 않은 값 배열로 인해 조기에 해결되는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-31 08:51:30299검색

Why Does Promise.all() Resolve Prematurely with an Array of Undefined Values?

정의되지 않은 배열로 Promise.all()을 조기에 해결

문제

"Promise.all이 정의되지 않은 배열을 반환하고 존재하기 전에 해결됩니다. 완료." 이 문제는 Promise.all()을 활용하는 함수가 정의되지 않은 값의 배열을 반환하고 배열 내의 모든 약속이 이행되기 전에 조기에 해결될 때 발생합니다.

설명

Promise에서 Promise.all( )는 약속 객체의 배열을 기대합니다. addText 함수의 지도 콜백에 Promise 반환이 없기 때문에 여기에 정의되지 않은 값의 배열이 생성됩니다.

<code class="js">function addText(queries) {
  return Promise.all(queries.map(function(query) {
    // Insert a `return` statement here.
    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>

return 문이 없으면 지도 콜백은 정의되지 않은 값의 배열을 반환하여 Promise 해결을 트리거합니다. 쿼리가 아직 완료되지 않았음에도 불구하고 .all()을 조기에 실행합니다.

해결책

반환 문에 코드를 포함하여 각 지도 콜백이 Promise를 반환하는지 확인하세요.

<code class="js">function addText(queries) {
  return Promise.all(queries.map(function(query) {
    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가 해결될 때까지 기다려 전체 프로세스가 성공적으로 완료되도록 합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.