Я использую 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)? Конечно, у меня нет скриншота приложения, на которое я хотел переключиться, потому что команда screencapture выполняется слишком рано.
я, хотя это был весь смысл обещаний и .then-цепочки ..
я ожидал бы, чтобы это произошло:
open -a sublime
ready with open -a sublime
screencapture ./sublime.png
ready with screencapture ./sublime.png
В качестве альтернативы, '.then (this.executeCommand.bind (это, 'ScreenCapture' + путь))' – Bergi