我在节点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不起作用......