Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menyelesaikan Janji Secara Berurutan dalam 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!