现在我有一个带有两种方法的模块。如何访问downloadFile函数以在downloadFiles函数中重用。现在它将抛出未定义downloadFile的异常。提前谢谢。
exports.downloadLib = {
downloadFile: async function (fileUrl, dest) {
const shell = require('node-powershell');
let ps = new shell({
executionPolicy: 'Bypass',
noProfile: true
});
let commandString = `iwr ${fileUrl} -OutFile ${dest}`;
ps.addCommand(commandString);
try {
await ps.invoke();
} catch (e) {
console.log(`ERROR - ${e}`);
} finally {
await ps.dispose();
console.log(`finished download file ${dest}`)
}
},
downloadFiles: function (fileUrls) {
fileUrls.forEach(function (fileUrl) {
downloadFile(fileUrl, fileUrl.substring(fileUrl.lastIndexOf('/') + 1))
}, this);
}
}
答案 0 :(得分:1)
为模块创建私有方法。另外,将其注入模块并在需要的地方调用它。下划线前缀是许多人用来表示私有方法的约定。
this._downloadFile()
您还可以将context._downloadFile()
保留在模块中,并执行let context = this
或 var table = $("#job-table").DataTable({
"ajax": {
url: "<?php echo url('/getJobs');?>",
type: "POST",
data: {
"connection": connectionArray,
"company": companyArray,
"type": typeArray
}
},
"processing": true,
"serverSide": true,
"columns": [
{ "data": "id" },
{ "data": "job_id" },
{ "data": "type" },
{ "data": "connection_id" },
{ "data": "company_id" },
{ "data": "message" },
{ "data": "total_completion_time" },
{ "data": "date" },
{ "data": "start_time" },
{ "data": "end_time" },
{ "data": "error_time" }
]
});
之类的操作。您需要在模块顶部为后者定义for (var i in this.files) {
console.log(i);
}
。
答案 1 :(得分:0)
downloadFiles: function (fileUrls) {
fileUrls.forEach(function (fileUrl) {
this.downloadFile(fileUrl, fileUrl.substring(fileUrl.lastIndexOf('/') + 1))
}, this);
}
downloadFile不是downloadFiles Scope的一部分,而是其上下文的一部分。