Rxjs Observable.first().subscribe()代替Promise.then()

Rxjs Observable.first().subscribe()代替Promise.then(),rxjs,rxjs5,Rxjs,Rxjs5,我有各种各样的方法,最近我将它们从返回承诺转换为返回可观测值。目前,这些方法通常只返回一个值。所以,在我以前调用myMethod.then()的地方,我切换到了myMethod.first().subscribe()。我这样做而不仅仅是subscribe(),因为我希望可以自动完成和清理可观察和订阅。我对这一点的理解正确吗?这是一种合理的方法吗?如果您以前的承诺现在是一个可观察的,并且在发出其值后完成,那么您不必为生命周期清理添加.first()。这仅仅是对你的可观察对象的一个修改,以向未来的你

我有各种各样的方法,最近我将它们从返回承诺转换为返回可观测值。目前,这些方法通常只返回一个值。所以,在我以前调用
myMethod.then()
的地方,我切换到了
myMethod.first().subscribe()
。我这样做而不仅仅是
subscribe()
,因为我希望可以自动完成和清理可观察和订阅。我对这一点的理解正确吗?这是一种合理的方法吗?

如果您以前的承诺现在是一个可观察的,并且在发出其值后完成,那么您不必为生命周期清理添加
.first()
。这仅仅是对你的可观察对象的一个修改,以向未来的你(或同事)表明你希望从调用的可观察对象中得到一个值,否则代码将出错。

如果你以前的承诺现在是一个可观察对象,在发出其值后完成,你不必添加
用于生命周期清理。这仅仅是你的可观察对象的一个修饰符,用来向未来的你(或同事)表明你希望从调用的可观察对象中得到一个值,否则代码会出错。

如果可观察对象没有产生结果,你可以使用而不是
first
来实际得到一个错误。这是有意义的。因此,在observable上调用
mergeMap()
之前添加
take(1)
,可以处理清理工作,客户端只需订阅,而不用担心取消订阅等?编辑:在本例中,
myMethod()
在内部使用
mergeMap()
,并返回结果的可观察值。这比需要更多的防御。当您的
mergeMap()
收到来自上游的完成信息时,一切都会自行清理。如果它接收到
0
1
n
值,这些值都将通过
mergeMap()
并由
myMethod()
返回的Observable在完成其自身之前发出。@Brandon根据用例的不同,您可能希望使用:如果Observable发出0或大于1的值,则将出错。如果可观察对象发出0值,则将出错。不同之处还在于
first()
在第一次发射后完成,其中
single
将等待完成,以确保仅发射1个元素。如果可观测对象未产生结果,您可以使用而不是
first
来实际获取错误。这是有意义的。因此,在observable上调用
mergeMap()
之前添加
take(1)
,可以处理清理工作,客户端只需订阅,而不用担心取消订阅等?编辑:在本例中,
myMethod()
在内部使用
mergeMap()
,并返回结果的可观察值。这比需要更多的防御。当您的
mergeMap()
收到来自上游的完成信息时,一切都会自行清理。如果它接收到
0
1
n
值,这些值都将通过
mergeMap()
并由
myMethod()
返回的Observable在完成其自身之前发出。@Brandon根据用例的不同,您可能希望使用:如果Observable发出0或大于1的值,则将出错。如果可观察对象发出0值,则将出错。不同之处还在于
first()
在第一次发射后完成,其中
single
将等待完成,以确保仅发射1个元素