2017-04-17 20 views
0

今、私は2つのメソッドを持つモジュールを持っています。 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

this.downloadFile –

+0

'downloadFiles'の中で' this.downloadFile'を使うことができます。 –

答えて

1

モジュールのプライベートメソッドを作成します。これとは別に、これをモジュールに注入し、必要な場所で呼び出します。アンダースコアプレフィックスは、プライベートメソッドを示すために多くの人が使用する規則です。

async function _downloadFile(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}`) 
 
    } 
 
} 
 

 
exports.downloadLib = { 
 
    downloadFile: _downloadFile, 
 

 
    downloadFiles: function(fileUrls) { 
 
    fileUrls.forEach(function(fileUrl) { 
 
     _downloadFile(fileUrl, fileUrl.substring(fileUrl.lastIndexOf('/') + 1)) 
 
    }, this); 
 
    } 
 
}

また、モジュール内_downloadFile()を維持し、this._downloadFile()またはcontext._downloadFile()ような何かを行うことができます。後者の場合、モジュールの上部にlet context = thisを定義する必要があります。

+0

しかし、なぜですか?私はそうしない理由を参照してください... –

+0

あなたが_downloadFileをエクスポートするかどうかを変更するのは簡単です –

+0

あなたの答えが簡単であることを認めてください。私はちょうど私が働いていた答えを、それが完璧だと主張しなかった。また、開発者が嫌悪感を抱いている場合に備えて、私はこれを避けます。 –

0
downloadFiles: function (fileUrls) { 
    fileUrls.forEach(function (fileUrl) { 
     this.downloadFile(fileUrl, fileUrl.substring(fileUrl.lastIndexOf('/') + 1)) 
    }, this); 
} 

downloadFileはダウンロードファイルスコープの一部ではなく、そのコンテキストの一部です。

+0

これは、このように適切ではありません。このようにして、グローバルオブジェクトがコンテキストになります。 –

+0

@Jordan Kanchelovです。あなたが知っているように見えるのは、2番目のパラメータです。ヒント:これはグローバルではありません。 –

+0

「use strict」を使用すると、この場合「this」は未定義です。この場合、私はそれを使用していないときには、グローバルを指す必要がありますか? –

関連する問題