В основном я использую языки программирования, такие как Scala и JavaScript. Я пытаюсь понять сходство и различия в том, как асинхронное реактивное программирование используется на обоих языках. Можете ли вы мне помочь?
Я не беру какую-либо конкретную структуру Js Promise
, потому что, похоже, многие реализуют аналогичные спецификации (например, Promise/A). Пока что я использовал Q.
Кажется, что в Javascript мы вызываем Deferred
объект, который мы разрешаем для завершения Promise
.
В Scala кажется, что Promise
- это объект, который вы разрешаете получить монаду Future
.
Может ли кто-нибудь сказать мне, правильно ли это? Есть ли веская причина для другого использования термина Promise
между Js и Scala?
Кроме того, в Scala мы обычно связываем монуры Future
с дальнейшими вычислениями, используя такие операторы, как map
и flatMap
(также называемые bind
в Haskell). Что эквивалентно этим в Js?
Возможно, я ошибаюсь, но мне кажется, что в Js then
на a Promise
вид дескриптора как операторов map
, так и flatMap
? Если да, можно ли получить a promise of promise of result
в Js? Например, мы можем получить Future[Future[Result]]
в Scala (который может быть сплющен до Future[Result]
).
Является ли Js Promise
монадой? Кажется, что это так, даже если имена методов не соответствуют тем, которые мы находим в монадской литературе.