Обещания в JavaScript обычно включают какой-то цепочек вызовов или функциональных API-интерфейсов API, где результаты функции обычно предоставляют методы продолжения, такие как, а затем, когда, когда и т. д. плюс некоторые флаги состояния, которые указывают, действительно ли результат действительно доступен. Функции с входными параметрами также могут поддерживать обещанные значения, определяющие, что входные данные являются обещанием и инкапсулируют их функциональность в тон, который может быть привязан, когда обещанное значение будет готово.
С этим вы можете обеспечить среду, в которой обещает имитировать параллельный язык, как это:..
MyApi.LongRunningTask(), а затем (функция (результат) {MyAppi.LongOtherTask (результат);}), то
или последовательный прецедент, когда длительные вызовы не зависят:
var value1 = MyApi.LongRunningTask();
var value2 = MyApi.LongRunningOtherTask();
MyApi.DoSomeFunction (value1, value2) .then ==> DoSomeFunction может проверить, готовы ли значения, а если нет, то их функция then/when будет выполнять свою логику.
Проблема рассмотрена довольно хорошо здесь: http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded –
'async' не подразумевает' concurrent', где вы идут не так. –