从另一个功能访问模块中的功能

时间:2017-04-17 15:34:11

标签: javascript

现在我有一个带有两种方法的模块。如何访问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);
    }
}       

2 个答案:

答案 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的一部分,而是其上下文的一部分。