Как я могу выразить начальные процессы с помощью Bacon.js вместо Обещания?

#javascript #promise #deferred #frp #bacon.js

#javascript #обещание #отложенный #frp #bacon.js

Вопрос:

Я всегда делаю что-то подобное для начальных процессов:

 $.when(dom(), webrtc(), websocket('wss://example.com/'), sleep(3000)).then(load, fail);
  

dom , webrtc , websocket , и sleep являются объектами Promise . Это выражение полезно для загрузки некоторых параллельных процессов для инициализации.

Теперь мне интересно, как я могу выразить эти вещи с помощью Bacon.js , способ функционального реактивного программирования.

Любая идея будет оценена. Заранее спасибо.

Ответ №1:

Прежде всего, совершенно нормально смешивать и сопоставлять обещания в вашем коде BaconJS. Тем не менее, учитывая абстракцию, у fromPromise BaconJS есть метод.

Используйте Bacon.fromPromise :

 var ready = Bacon.fromPromise($.when(dom(), 
                                     webrtc(),
                                     websocket('wss://example.com/'),
                                     sleep(3000)))

ready.onValue(function(value){
    console.log("All ready");
});
  

Обратите внимание, что сила здесь заключается в объединении этих потоков на этапе инициализации — вам это редко нужно, поэтому на вашем месте я бы, вероятно, придерживался promise .

Комментарии:

1. Спасибо за ваш ответ. Да, инициализацию редко нужно вызывать. Мне просто интересно, могу ли я удалить зависимость от Promise и использовать вместо этого только бекон или нет…

2. Хотя почему? Наличие разных абстракций, каждая из которых уместна, — это хорошо 🙂