Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Menyelesaikan Janji Secara Berurutan dalam JavaScript?

Bagaimanakah Saya Boleh Menyelesaikan Janji Secara Berurutan dalam JavaScript?

Barbara Streisand
Lepaskan: 2024-12-15 07:37:09
asal
672 orang telah melayarinya

How Can I Resolve Promises Sequentially in JavaScript?

Selesaikan Janji Secara Berurutan

Artikel ini meneroka cara untuk menangani masalah menyelesaikan janji secara berurutan.

The coretan kod yang disediakan menggunakan rekursi untuk membaca tatasusunan fail secara bersiri, menyelesaikan janji hanya selepas semua fail telah dibaca. Walaupun pendekatan ini berfungsi, ia memperkenalkan rekursi yang tidak perlu.

Alternatif yang lebih mudah ialah memanfaatkan gelung untuk atau mengurangkan untuk merantai resolusi janji:

var readFiles = function(files) {
  var p = Promise.resolve(); // Q() in q

  files.forEach(file =>
      p = p.then(() => readFile(file)) 
  );
  return p;
};
Salin selepas log masuk

Dengan mengurangkan:

var readFiles = function(files) {
  return files.reduce((p, file) => {
     return p.then(() => readFile(file));
  }, Promise.resolve()); // initial
};
Salin selepas log masuk

Perpustakaan Promise selalunya menyediakan kaedah utiliti untuk resolusi berjujukan, seperti peta Bluebird() dengan serentak: 1:

var Promise = require("bluebird");
var fs = Promise.promisifyAll(require("fs"));

var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 });
Salin selepas log masuk

Dalam JavaScript moden, fungsi async juga boleh digunakan untuk janji berurutan:

async function readFiles(files) {
  for(const file of files) {
    await readFile(file);
  }
};
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Janji Secara Berurutan dalam JavaScript?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan