首页 >web前端 >js教程 >如何在 JavaScript 中按顺序解决 Promise?

如何在 JavaScript 中按顺序解决 Promise?

Barbara Streisand
Barbara Streisand原创
2024-12-15 07:37:09672浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn