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

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

Barbara Streisand
发布: 2024-12-15 07:37:09
原创
677 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板