2016-07-12 2 views

답변

39

&tldr;

그것은 논리 구획 및 파이프 라인에 주입 할 수있는 편의를위한 함수이다.

source는 아마도 가장 확실한 설명입니다 설명

긴. 실제로 소스 코드 Observable으로 호출되는 함수를 전달하는 것입니다.

Rx.Observable.prototype.let = function(fn) { 
    return fn(this); 
} 

이 유틸리티는 여러 소스에 대해 재사용하려는 파이프 라인을 만들거나 사전 정의 할 수 있다는 것입니다. 수신, 반응 검색 창에 대한 공통의 수사를 고려

// Listen to a key up event on the search bar 
// and emit the value of the search 
Rx.Observable.fromEvent(searchBar, 'keyup', e => e.target.value) 
    // Don't search too eagerly 
    .filter(text => text.length > 3) 
    .debounceTime(500) 
    //Search logic 
    .flatMap(text => $.getJSON(`my/search/api?q=${text}`)) 
    .flatMap({results} => results) 
    //Handler 
    .subscribe(appendToList); 

은 위의 파이프 라인을 생성 할 수 있는지의 구조에 대한 기본적인 이해를 제공해야합니다. 우리가 코드를 정리하거나 다른 곳에서 사용할 수 있도록이 논리의 일부를 추상화하고 싶다면 일반적으로 새로운 연산자를 만드는 것을 의미하기 때문에 약간 까다로울 수 있습니다.

이 솔루션은 공통 논리를 소스 Observable을 전달할 수있는 함수로 끌어오고 해당 논리를 적용한 Observable을 반환하는 비교적 간단한 방법입니다. 따라서 위

이 될 수 있습니다 switchMap`이지도``이다`로 let`가`select`이`처럼

//Defined in pipelines.js 
function filterBuilder(minText, debounceTime) { 
    return (source) => 
    source.filter(text => text.length > minText) 
      .debounce(debounceTime); 
} 

function queryBuilder(baseUrl) { 
    return (source) => 
    source.flatMap(text => $.getJSON(`${baseUrl}?q=${text}`)) 
      .flatMap({results} => results); 
} 


//In your application code 

Rx.Observable.fromEvent(searchBar, 'keyup', e => e.target.value) 
    .let(filterBuilder(3, 500)) 
    .let(queryBuilder('my/search/api')) 
    .subscribe(appendResults); 
+1

소리가 난다. 그러나'select'는'map'입니다.'let'과'switchMap'은 어떻게 다릅니 까? –

+3

@ 존 크리스토퍼 존스. 하나의'select'와'map'은 같은 함수로 서로 별칭이 있습니다. 'let '은 추상적 인 소스를 기반으로 파이프 라인을 정의한 다음 구체적인 소스에 연결함으로써 관심사를 깨끗하게 분리하는 것에 관한 것입니다. – paulpdaniels

+1

감사합니다. 나는 [select]와 [let] 둘 다 [github.com/ngrx/example-app]의 셀렉터 패턴의 예에서 사용하고 있지만, 그 주위에 머리를 감싸는 것은 아닙니다. 그래서, jQuery 용어에서'let'은 말 그대로 메서드 연쇄 호출입니다. 메서드 체인의 섹션을 매개 변수화 할 수 있습니다. 또는'switchMap'과 비교하기 위해 전달하는 함수는 Observables를 반환해야하지만'switchMap'은 스트림 멤버를 받고'let'은 스트림 자체를받습니다. –

관련 문제