我正在创建一个使用节点js & vorpal的cli应用程序。没有语法错误或警告,所有的工作都完美,除了漩涡日志不工作。下面是一个小代码片段。
//functions.js
const mkdir = require('mkdirp');
function makeDir(dirname,location) {
let p = `${location}/${dirname}`;
mkdir(p, function(err) {
if (err) return err;
return `Directory ${dirname} created !`;
});
}
module.exports.makeDir = makeDir;
//main.js
const app = require('vorpal')();
const functions = require('./functions');
app
.command('newdir <name> <location>', 'Create new database')
.action(function(args,cb) {
let name = args.name;
let location = args.location;
functions.makeDir(name,location,function(err,msg) {
if (err) this.log(err);
this.log(msg); //nothing gets logged
});
cb();
});
app
.delimiter('app $')
.show();
正如我说的,一切都很好&创建了目录,但没有显示日志。
我尝试过的是:使用app.log &使用app.session.log。它甚至不记录自定义字符串,例如: this.log('Hello')
系统: Windows
发布于 2018-11-06 16:32:51
应该对makeDir函数进行编码,以接受回调,并在传递适当信息时调用它,如下所示:
const mkdir = require('mkdirp');
function makeDir(dirname,location, callback /* accept a callback */ ) {
let p = `${location}/${dirname}`;
mkdir(p, function(err) {
if (callback)
callback(err ? err : null, err? null : `Directory ${dirname} created !`);
});
}
module.exports.makeDir = makeDir;然后你就可以:
functions.makeDir(name,location,function(err,msg) {
if (err) this.log(err);
this.log(msg); //nothing gets logged
} /* callback now is accepted */ );在你的行动。
PS确保将this引用绑定到回调,例如使用Function.prototype.bind,以便在回调中使用this.log时不会得到有趣的结果。
https://stackoverflow.com/questions/53168880
复制相似问题