2017-03-16 55 views
0

我正在使用npm'powershell'包執行PowerShell命令並讀取相關輸出。我想寫一個函數來返回標準的命令輸出(這樣我可以調用該函數並在斷言中使用它的返回值等)。JavaScript - 從匿名函數參數返回值

const PowerShell = require("powershell"); 

var myFunction = function (command) { 
    let ps = new PowerShell(command); 

    ps.on("error", err => { 
     console.error(err); 
    }); 

    ps.on("output", data => { 
     console.log(data); 
     //return data; <-- this does not work 
    }); 

    ps.on("error-output", data => { 
     console.error(data); 
    }); 

    ps.on("end", code => { 
     console.log("The end"); 
    }); 
}; 

我想myFunction返回數據值(從標準輸出)。但是,我不知道如何正確地做到這一點。您能否提一些建議?

+0

通過網站上的節點'異步功能的異步函數返回值的一打':tl; dr - >使用回調或Promise – paqash

+3

[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response -from-an-asynchronous-call) – paqash

+0

'Promisify'你的函數或傳入'callback'。 有很多關於如何做到這一點的現有資源。 – Sachin

回答

0

看看回調是如何工作的。你的功能的一個例子是

var myFunction = function (command, callback) { 
    // code 
    ps.on("output", data => { 
     callback(data) 
    }); 
    // code 
}; 

myFunction('ls', function (data) { 
    console.log('The callback data:', data); 
}); 
+0

Skabbi,謝謝。它可以工作,但是,這不是完整的解決方案。我希望myFunction返回一個值,以便我可以在預期中使用它。我想將myFunction調用的結果分配給一個變量,然後在期望中使用這個變量。可能嗎? –

+0

你可以單元測試回調函數,你怎麼做取決於你正在使用的庫。但是你不能真正地使用回調函數返回任何東西,因爲它們是異步的,我不確定你想要做什麼,但是你可以將'data'賦給另一個變量,或者你可以檢查出[async](http ://caolan.github.io/async/)模塊 – Skabbi

+0

Skabbi謝謝。不幸的是,我仍然無法解決這個問題。我正在使用Jasmine框架。我只想寫下面的表達式:expect(commandOutput).toEqual('somevalue')。放置expect而不是console.log ...不起作用。你能否給我多些提示? –