如何在Observable中返回模拟数据?

Art*_*ary 3 observable rxjs angular

假设我们在返回Observable的服务中具有此方法:

getSearchResults(request: LocationSearchRequest){
      return this.http.get(this.getApiUrl(request))
            .map(res => <LocationSearchResponse> res.json())    
            .catch(this.handleError);    
}
Run Code Online (Sandbox Code Playgroud)

如何修改此代码以返回模拟的数据费率,然后进行实际的GET请求?

import { MOCKEDDATA } from './mocked-data';
Run Code Online (Sandbox Code Playgroud)

这不是重复的问题。这与测试,茉莉和angualr2测试api没有关系。

Joe*_*mer 15

Xavi的回答很好也很简单,但它对我不起作用 - 我像这样调整了它:

import { of } from 'rxjs';
Run Code Online (Sandbox Code Playgroud)

进而:

return of(MOCKEDDATA);
Run Code Online (Sandbox Code Playgroud)

希望这对其他人也有帮助!


小智 8

我前段时间有同样的话题。也可以使用以下方法:

Observable.create()

以下代码(使用打字稿)解决了该问题:

getElementTemplateNames() : Observable<string[]> {
let names : string[] = MockedElementData.getNames();
return Observable.create( observer => {
    observer.next(names);
    observer.complete();
});}
Run Code Online (Sandbox Code Playgroud)

MockedElementData保存数据。

Observable的导入语句为:

import { Observable } from "rxjs/Observable";
Run Code Online (Sandbox Code Playgroud)


小智 7

你可以做:

Observable.of(MOCKEDDATA)

您还可以添加延迟:

Observable.of(MOCKEDDATA).delay(1000)

  • 这不再有效:可以在此处找到功能版本 /sf/answers/3560652301/ (3认同)