首頁 > web前端 > js教程 > 如何在 JavaScript 中依序解決 Promise?

如何在 JavaScript 中依序解決 Promise?

Barbara Streisand
發布: 2024-12-15 07:37:09
原創
671 人瀏覽過

How Can I Resolve Promises Sequentially in JavaScript?

順序解決 Promise

本文探討了解決順序解決 Promise 問題的方法。

提供的程式碼片段使用遞歸來連續讀取檔案數組,僅在所有檔案都已讀取後才解決承諾 讀取。雖然這種方法有效,但它引入了不必要的遞歸。

更簡單的替代方案是利用for 迴圈或reduce 來連結承諾解析:

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

  files.forEach(file =>
      p = p.then(() => readFile(file)) 
  );
  return p;
};
登入後複製

使用reduce:

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

Promise 庫通常提供用於順序解析的實用方法,例如Bluebird 的具有並發性的map(): 1:

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

var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 });
登入後複製

在現代 JavaScript 中,非同步函數也可以用於順序 Promise:

async function readFiles(files) {
  for(const file of files) {
    await readFile(file);
  }
};
登入後複製

以上是如何在 JavaScript 中依序解決 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板