您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

解决承诺一个接一个(即按顺序)?

解决承诺一个接一个(即按顺序)?

:如果环境支持,我将使用异步功能

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

如果需要,可以使用异步生成器(如果您的环境支持)将读取文件的时间推迟到需要它们之前:

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

更新:再次考虑-我可能改用for循环:

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

  files.forEach(file =>
      p = p.then(() => readFile(file)); 
  );
  return p;
};

或更紧凑,减少:

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

在其他Promise库(如when和Bluebird)中,您可以使用此方法

例如,蓝鸟将是:

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

var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 });
// if the order matters, you can use Promise.each instead and omit concurrency param

readAll.then(function(allFileContents){
    // do stuff to read files.
});

尽管今天确实没有理由 使用异步等待。

其他 2022/1/1 18:17:07 有396人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶