"Promise.all is returning array of undefined and solves before being selesai." Isu ini berlaku apabila fungsi yang menggunakan Promise.all() mengembalikan tatasusunan nilai yang tidak ditentukan, menyelesaikan lebih awal sebelum semua janji dalam tatasusunan itu dipenuhi.
Dalam Promise, Promise.all( ) menjangkakan pelbagai objek janji. Tatasusunan nilai yang tidak ditentukan dibuat di sini kerana panggilan balik peta dalam fungsi addText tidak mempunyai pengembalian 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>
Tanpa pernyataan pemulangan, panggilan balik peta akan mengembalikan tatasusunan nilai yang tidak ditentukan, mencetuskan resolusi Promise .all() lebih awal, walaupun pertanyaan belum lengkap.
Pastikan setiap panggilan balik peta mengembalikan janji dengan melampirkan kod dalam penyata pemulangan.
<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>
Dengan berbuat demikian, Promise.all() akan menunggu semua janji dalam tatasusunan diselesaikan sebelum menyelesaikan sendiri, memastikan keseluruhan proses selesai dengan jayanya.
Atas ialah kandungan terperinci Mengapa Promise.all() Menyelesaikan Secara Pramatang dengan Susunan Nilai Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!