2
我使用nodeJS爲了鏈接兩個exec調用。我想等待第一個完成,然後繼續第二個。我正在使用Q。nodeJS:用承諾鏈接exec命令
我的實現看起來是這樣的:
我有一個executeCommand功能:
executeCommand: function(command) {
console.log(command);
var defer = Q.defer();
var exec = require('child_process').exec;
exec(command, null, function(error, stdout, stderr) {
console.log('ready ' + command);
return error
? defer.reject(stderr + new Error(error.stack || error))
: defer.resolve(stdout);
})
return defer.promise;
}
並有captureScreenshot函數鏈中的前一兩個電話。
captureScreenshot: function(app_name, path) {
return this.executeCommand('open -a ' + app_name)
.then(this.executeCommand('screencapture ' + path));
}
當我執行captureScreenshot( '昇華',」 ./sublime.png)日誌輸出如下:
open -a sublime
screencapture ./sublime.png
ready with open -a sublime
ready with screencapture ./sublime.png
有人可以解釋爲什麼第二命令的執行(抓屏)不等待,直到第一個命令(打開 - 昇華)完成的執行?當然,我沒有得到我想切換到的應用程序的屏幕截圖,因爲screencapture命令執行得太早。
不過,我覺得這是承諾和。然後,鏈接整點..
我本來期望這種情況發生:
open -a sublime
ready with open -a sublime
screencapture ./sublime.png
ready with screencapture ./sublime.png
另外'。然後(this.executeCommand.bind(此, '抓屏' +路徑))' – Bergi