Как отлаживать rxjs5?

В разделе RxJS — цели я прочитал, что их цель — улучшить отладку:

Цели

Предоставьте больше отлаживаемых стеков вызовов, чем в предыдущих версиях RxJS.

Я только начал использовать redux-observable, что мне гораздо легче понять, сравнивая его с redux-saga, так как я уже привык к реактивному стилю с lodash и ramda (хорошо, может быть стиль fp ;). Я был удивлен, что его еще нельзя отладить. Это правда? Если так, то я должен переключиться на redux-sagas, может быть, или придерживаться redux-thunk.

Редактировать на основе ответа Джея Фелпса

Под отладкой я имел в виду: «Как установить точку останова, например, observable.map(...) в браузере?» С lodash я могу установить точку останова в браузере, и он остановится прямо на _.map(...). Как это сделать с redux-observable (или rxjs)? Я не хочу зависеть от рисования мраморных диаграмм и console.log().


person Amio.io    schedule 26.07.2016    source источник
comment
это еще не возможно отладить, что вы имеете в виду? Стеки вызовов RxJS v5 намного точнее (что и было целью). Вы, безусловно, можете отлаживать код RxJS. Все, кто его использует, отлаживают его. Никто не будет использовать то, что невозможно отладить.   -  person jayphelps    schedule 26.07.2016


Ответы (2)


Конечно, можно отлаживать код RxJS. Я думаю, что, вероятно, можно с уверенностью сказать, что вряд ли кто-то использовал бы его, если бы это было не так - Angular2 также сильно построен на нем.

Чаще всего люди используют те же способы, которыми они отлаживают другие JavaScript, точки останова (например, отладчик) и console.log().

Некоторые пользователи используют более продвинутые методы, такие как рисование графиков зависимостей или мраморных диаграмм. Андре Стальц недавно писал об этом, так что это может быть полезным ресурсом.

В конечном счете, любой вид асинхронного программирования будет сложнее отлаживать. Это не уникально для redux-observable/RxJS; быстрый поиск также выявит множество проблем с отладкой для redux-saga.

Оказывается, redux-thunk — лучшее решение для подавляющего большинства приложений, потому что большинство из них не имеют сложных проблем с побочными эффектами, которые оправдывают что-то вроде redux-observable или redux-saga. Хотя, если вы уже хорошо разбираетесь в RxJS, нет ничего плохого в использовании redux-observable.

redux-saga как проект существует дольше, чем redux-observable, так что это, безусловно, одно из основных преимуществ. Вы найдете больше документации, примеров и, вероятно, у вас будет лучшее сообщество, от которого можно получить поддержку.

Обратной стороной является то, что операторы и API, которые вы изучаете в Redux-saga, не так легко переносимы, как изучение RxJS, который используется повсеместно. redux-observable супер-супер супер прост внутренне, он просто дает вам естественный способ использования RxJS. Так что, если вы знаете RxJS (или хотите), это очень естественно.

Мой совет на данный момент для большинства людей заключается в том, что если вам нужно спросить, какой из них вы должны использовать, вам, вероятно, следует выбрать redux-saga.

(отказ от ответственности: я являюсь одним из сопровождающих redux-observable и RxJS v5)

person jayphelps    schedule 26.07.2016
comment
Спасибо за исчерпывающий ответ. Я обновил вопрос, чтобы быть более точным. - person Amio.io; 26.07.2016
comment
Спасибо за исчерпывающий ответ. Я обновил вопрос, чтобы быть более точным. Я также вижу, что redux-observable больше подходит для повторного использования в других проектах, чем redux-saga из-за использования rx. - person Amio.io; 26.07.2016
comment
Просматривая эту статью об отладке rxjs - github.com/Reactive-Extensions/RxJS/blob/master/doc/ - действительно кажется, что нет способа отладить его с помощью точек останова. Так что я приму ответ. - person Amio.io; 26.07.2016
comment
@zatziky эта статья (и этот репозиторий) предназначена для RxJS v4, а не v5. Это одна из основных причин, по которой v5 была написана, чтобы решить эту проблему. Кроме того, его внутренний механизм подъема сделает возможным использование некоторых действительно потрясающих инструментов разработки, но они еще не написаны, потому что мы все еще заканчиваем первый основной выпуск v5. - person jayphelps; 27.07.2016
comment
Репозиторий RxJS v5 находится здесь: github.com/ReactiveX/rxjs, документы здесь reactivex.io/rxjs - person jayphelps; 27.07.2016

import Rx, { Observable } from 'rxjs'

const arrStream$ = Observable.of(1,2,3)
                    .do(x=>console.log('Before',x))  // 1, 2, 3
                    .map(x=>x*2)
                    .do(x=>console.log('After',x))   // 2, 4, 6
                    .subscribe(value=>doThingsWith(value))
// real console output
// Before 1
// After  2
// doThingsWith(2)
// Before 2
// After  4
// doThingsWith(4)
// Before 3
// After  6
// doThingsWith(6)

.do(debugValue=> console.log(debugValue))

person Wayne Chiu    schedule 10.01.2017
comment
Хороший пример, но нужно объяснение, чтобы избежать отрицательных голосов - person Eslam Sameh Ahmed; 29.07.2020