我有一个函数有时返回一个包含在observable中的值,其他时候返回一个普通值。是否有一种优雅的方式来获得价值?目前我正在使用这种策略:
let mayBeAnObservable = getData();
let resultObservable = mayBeAnObservable instanceof Observable ? mayBeAnObservable : Observable.of(mayBeAnObservable)
resultObservable.subscribe(resultValue => dostuff(resultValue));
有更好的方法吗?
答案 0 :(得分:2)
我觉得你做的很好。如果您真的想要更优雅的解决方案,请让getData()
始终返回Observable。即使任何使它不是可观察的东西,只需用Observable.of()
包裹它,就像你已经做过的那样:
const getData = ()=>{
let someData = someOperations();
if(normalCondition){
return someData;
}
if(forWhateverReasonItsNotObservable){
return Observable.of(someData)
}
}
选择一方。更安全的一面。如果您的服务有可能返回可观察量,则最好始终返回Observable
。原因?您可以获得反应式编程的所有好处 - 您可以.map()
,.filter()
,.delay()
,.buffer()
,observables
- 您可以对此进行各种操作<plugin>
<groupId>com.googlecode.maven-download-plugin</groupId>
<artifactId>download-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>wget</goal>
</goals>
<configuration>
<url>https://testserver.com/svn/development/documents/Operations_Manual.docx</url>
<outputFileName>Operations Manual.docx</outputFileName>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
;如果你只是将它作为一个原始值来处理它可能不那么方便。
答案 1 :(得分:1)
我正在使用以下函数(支持Promises和普通数据):
import { fromPromise } from 'rxjs/observable/fromPromise';
import { of } from 'rxjs/observable/of';
import { isPromise } from 'rxjs/util/isPromise';
import { isFunction } from 'rxjs/util/isFunction';
const isObservable = v => isFunction(v.subscribe);
export default function(data) {
if (isObservable(data)) return data;
if (isPromise(data)) return fromPromise(data);
return of(data);
}
我不是它的作者,这里是原始来源并对其进行测试 - https://github.com/zxbodya/router1-app-template/tree/master/src/utils