2016-05-31 6 views
2

로 구독 수를 사용하여 I 가입자를 사용하여 매우 간단한 Angular2을 수행하는 방법에 없습니다 확신 :Angular2이 약속

a() { 
    return getValueFromService() // Return Observable 
    .subscribe(callA) 
} 

b() { 
    a().subscribe(callB) // This won't work as a() return a Subscriber 
} 

는 기본적으로, 나는 내 callB 항상 내 칼라 후 올 것이다 있는지 확인하고 싶습니다. 은 Promise을 반환하고 then()을 사용하는 것과 같습니다.

저는 최신 Angular2 베타 버전을 사용하고 있습니다.

답변

1

당신은 do 운영자 활용할 수있다 : 당신이 그것에 가입 할 수 있도록

a() { 
    return getValueFromService() // Return Observable 
    .do(callA) 
} 

b() { 
    a().subscribe(callB) // This won't work as a() return a Subscriber 
} 

subscribe 방법은 관찰 만 구독을 반환하지 않습니다를 ... do 연산자는, 새로운 관찰 돌아갑니다. 무언가를 트리거하려고하지만 결과를 처리하지 않을 경우 (결과는 비동기 데이터 흐름에 전파되지 않습니다) 사용해야합니다.

이 경우
a() { 
    return getValueFromService() // Return Observable 
    .flatMap(callA) 
} 

b() { 
    a().subscribe(callB) // This won't work as a() return a Subscriber 
} 

, callA는 관측을 반환해야합니다 : 당신이 구독 콜백 내에서 getValueFromService의 결과를 얻으려면

또 다른 옵션은 flatMap 연산자를 활용하는 것입니다.

1

당신은

a() { 
    return getValueFromService() // Return Observable 
    .toPromise().then(callA); 
} 

b() { 
    a().toPromise().then(callB); // This won't work as a() return a Subscriber 
} 

그때 Observables은 이제 새로운 표준을 믿고

a().then(b); 
+0

처럼 호출 할 수 있습니다, 나는 약속을 사용하지 않도록하고 싶습니다. 나는 Angular2의 버전이 지금은 확실하지 않지만, toPromise()는 Observable on My에 존재하지 않습니다. – Scipion

+0

'toPromise'는 연산자이며, 각 연산자와 마찬가지로'import 'rxjs/add/operator/toPromise';'와 같이 임포트해야합니다. 관찰 할 수있는 것에 대해 과장된 의견이 있으며 이점이 있습니다. '약속'은 여전히 ​​유효합니다. 'Observable'을 선호한다면 Thierrys의 대답이 당신의 필요에 맞아야합니다. –

+1

나의 나쁜, 참으로 나는 통신 수를 추가하는 것을 잊었다. 귀하의 기여에 감사드립니다. – Scipion