Mengapa Promise.all() Menyelesaikan Secara Pramatang dengan Susunan Nilai Tidak Ditakrifkan?

DDD
Lepaskan: 2024-10-31 08:51:30
asal
304 orang telah melayarinya

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

Menyelesaikan Promise.all() Prematurely with Array of Undefined

Problem

"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.

Penjelasan

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>
Salin selepas log masuk

Tanpa pernyataan pemulangan, panggilan balik peta akan mengembalikan tatasusunan nilai yang tidak ditentukan, mencetuskan resolusi Promise .all() lebih awal, walaupun pertanyaan belum lengkap.

Penyelesaian

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!