Promise.all은 여러 비동기 작업을 동시에 실행하고 해당 작업을 집계하는 강력한 도구입니다. 결과. 그러나 올바르게 사용하지 않으면 정의되지 않은 값의 배열로 해결하는 등 예상치 못한 동작이 발생할 수 있습니다.
주어진 코드를 고려하세요.
classMethods.getQueries = function(models, dbId, dateStart, dateEnd) { return new Promise(function(resolve, reject) { ... then(addText, reject) .then(function(queries) { console.log("getQueries finished", queries); // Array of 10× undefined! resolve(queries); }, reject); }); };
여기서 addText 함수는 지도 콜백의 개별 약속이 해결되기 전에 정의되지 않은 값의 Promise.all을 반환합니다. 이로 인해 getQueries가 정의되지 않은 배열로 해결됩니다.
모든 Promise가 이행된 후 해결하려면 각 맵 콜백에서 Promise를 반환하세요.
function addText(queries) { return Promise.all(queries.map(function(query) { // Return the promise to delay resolution until the operation succeeds/fails. 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); }); })); };
Promise.all은 Promise 객체의 배열을 허용한다는 점을 기억하세요. 정의되지 않은 값은 즉시 해결되어 잠재적으로 조기 해결이 발생할 수 있습니다. 올바른 결과 배열을 보장하려면 항상 각 개별 작업에서 Promise를 반환하세요.
위 내용은 Promise.all이 정의되지 않은 값으로 해결되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!