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
Barbara Streisandasal
2024-12-15 07:37:09674semak imbas

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;
};

Dengan mengurangkan:

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

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 });

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

async function readFiles(files) {
  for(const file of files) {
    await readFile(file);
  }
};

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!

Kenyataan:
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