2016-08-30 1 views
1

Я пытаюсь выяснить «правильный» способ реализации обработчика Dispose на моем заказ создана Наблюдаемым с помощью Rx.Observable.createразница в подписи одноразового возвращенной в Rx.Observable.create

имени функции отчуждать вернулась:

Rx.Observable.create(obs => { 
    //emit values 
    obs.onComplete(); 

    return function dispose() { 
    console.log('diposed'); 
    }; 
}); 

анонимная функция возвращается:

Rx.Observable.create(obs => { 
    //emit values 
    obs.onComplete(); 

    return() => { 
    console.log('disposed'); 
    }; 
}); 

Явный Disposable.create вернулся:

Rx.Observable.create(obs => { 
    //emit values 
    obs.onComplete(); 

    return Rx.Disposable.create(() => { 
    console.log('disposed'); 
    }); 
}); 

Все они, кажется, работают точно так, но документация не совсем понятно, о том, что является предпочтительным способом пойти.

ответ

2

Это будет действительно то, на что вы предпочитаете то, что хотите. Хотя я думаю, что эти три использования на самом деле, undefined, function, Disposable. Выбор между именованной функцией и анонимной лямбдой является скорее отличием JavaScript, а не Rx, поэтому я рекомендую вам ознакомиться с различиями (семантический this, читабельность вызова и т. Д.).

С точки зрения юзабилити это не имеет особого значения, поскольку структура будет обертывать значения и функции false-y в either a Disposable.empty or Disposable.create respectively.

Одно из преимуществ (стрелка) функция подхода заключается в том, что если в каком-то момент обновления до RxJS5 где Disposable ->Subscription вы можете избежать того, чтобы сделать целую кучу рефакторинга, где когда-либо вы явно под названием этого типа (или сделать некоторые вроде глобального aliasing), так как новая версия делает такую ​​же манеру преобразования.

Выбор зависит от вас.

Смежные вопросы