这段nodejs代码有优化的地方吗?

在不使用async的情况下,循环多个promise该怎么写会好点?


const fs = require('fs');
const path = require('path');
const upyun = require('upyun');
const {serviceName, account, passwd} = require('./password');

const service = new upyun.Service(serviceName, account, passwd);
const client = new upyun.Client(service);

const dirname = 'dist';

const readFile = (name) => {
  return new Promise((resolve, reject) => {
    fs.readFile(path.join(__dirname, dirname, name), (err, data) => {
      if (err) {
        return reject(err);
      }
      return resolve(data);
    });
  });
};

const readDir = (name) => {
  return new Promise((resolve, reject) => {
    fs.readdir(path.join(__dirname, name), (err, data) => {
      if (err) {
        return reject(err);
      }
      return resolve(data);
    });
  });
}

readDir(dirname).then((data) => {
  for(let i = 0; i < data.length; i++) {
    const filename = data[i];
    readFile(filename).then((data) => {
      return client.putFile(filename, data)
    }).then((data) => {
      console.log(`上传成功: ${filename}`);
    }).catch(err => {
      console.log(`上传失败: ${filename}`);
    });
  }
}).catch(err => {
  console.log(err);
});

上述for循环的地方感觉怪怪的,还可以怎么写呢?

阅读 1.8k
1 个回答
Promise.all(data.map(function(file){
    return readFile(file).then()...;
}))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题