Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Вам понадобится использовать следующий формат для powershell:
Start-Process java -ArgumentList '-jar', 'MyProgram.jar' `
-RedirectStandardOutput '.\console.out' -RedirectStandardError .\console.err'
Или другой вариант, который вы можете использовать, - Start-job:
Start-Job -ScriptBlock {
& java -jar MyProgram.jar >console.out 2>console.err
}
Похоже, что -jar
подбирается как аргумент Start-Process
, а не передается в java
.
Хотя в документации указано, что -ArgumentList
- Необязательно, Я подозреваю, что не учитывает вещи типа -option
.
Вероятно, вам нужно использовать:
Start-Process -FilePath java -ArgumentList ...
Например, в Powershell ISE , следующая строка вызывает помощь Java (хотя и быстро исчезает):
Start-Process -FilePath java -argumentlist -help
, но эта строка :
Start-Process -FilePath java -help
вызывает Powershell ] себя , чтобы жаловаться на -help
.