vorpal命令行中的Async.map

时间:2017-08-25 06:06:14

标签: javascript node.js asynchronous es6-promise vorpal.js

我在节点js中创建一个命令行,所以我使用Vorpal这样做但是当我尝试使用Async库(Async.map)时遇到问题,所以命令行永远不会停止。

所以这是我的代码:

首先,我使用Async.applyEachSeries映射每个可用的命令,如

let commands = [Users];

Async.applyEachSeries(commands, program, (err) => {
  //If no command available enter in interactive mode
});

// Users.js

注册管理用户的命令

module.exports = (program, done) => {

  program
    .command('createUsers <file>', 'Create firebase users')
    .action(internals.createUsers(program));

  done();
};

internals.createUsers读取文件并调用firebase API以创建这样的用户

internals.createUsers = (program) => (args, done) => {
  internals
  .parse(args.file)
  .then(users => {
    async.mapLimit(users, 2, (user, cb) => {

      program.firebaseAdmin.auth()
      .createUser({
        email: user.email,
        emailVerified: true,
        password: user.password,
        displayName: user.name,
        disabled: false
       })
       .then(userRecord => {
         return cb(null,Object.assign(user,{status: 'new'}));
       })
       .catch(err => {
         if (err.code == 'auth/email-already-exists') {
           return cb(null,Object.assign(user,{status: 'email-already-exists'}));
         }
         return cb(err);
       });

    },(err,results) => {

      if (err) {
        return done(err);
      }
      console.log(results);
      done(null,'ok');
    });
  })
  .catch(err => {
    done(err);
  })
}

正常工作(最后一次console.log(结果)打印正确)但程序永远不会结束。

我一直在逐个测试它,然后当我将firebase承诺引入混合时出现问题,也许它对Async不起作用......

0 个答案:

没有答案