Angular2使用Subscribes作为承诺

时间:2016-05-31 10:06:56

标签: angular

我不知道如何使用订阅者做一个非常简单的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测试版。

2 个答案:

答案 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);