我不知道如何使用订阅者做一个非常简单的Angular2:
a() {
return getValueFromService() // Return Observable
.subscribe(callA)
}
b() {
a().subscribe(callB) // This won't work as a() return a Subscriber
}
基本上,我想确保我的callB总是在我的callA之后来。
这就像让a()
返回Promise
并使用then()
一样。
我使用的是最新的Angular2测试版。
答案 0 :(得分:1)
您可以利用do
运算符:
a() {
return getValueFromService() // Return Observable
.do(callA)
}
b() {
a().subscribe(callB) // This won't work as a() return a Subscriber
}
subscribe
方法不返回observable而是订阅... do
运算符返回一个新的observable,因此您可以订阅它。当您想要触发某些但不处理结果时,必须使用它(结果不会在异步数据流中传播)。
如果您想在订阅回调中获得flatMap
的结果,那么另一个选择是利用getValueFromService
运算符:
a() {
return getValueFromService() // Return Observable
.flatMap(callA)
}
b() {
a().subscribe(callB) // This won't work as a() return a Subscriber
}
在这种情况下,callA
必须返回一个observable。
答案 1 :(得分:1)
你可以
a() {
return getValueFromService() // Return Observable
.toPromise().then(callA);
}
b() {
a().toPromise().then(callB); // This won't work as a() return a Subscriber
}
然后将其称为
a().then(b);