Angular 模拟角度2的长响应

Angular 模拟角度2的长响应,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,出于教育目的,我需要在Angular 2中模拟来自服务器的长响应。我有密码 getTasks() : Observable<Task[]> { return this.http.get('data/tasks.json').map(response => { return response.json(); }); } // using getTasks().subscribe(groups => { this.tasks = g

出于教育目的,我需要在Angular 2中模拟来自服务器的长响应。我有密码

getTasks() : Observable<Task[]> {
    return this.http.get('data/tasks.json').map(response =>  {
        return response.json();
    });
}

// using 
getTasks().subscribe(groups => {
   this.tasks = groups;
});
在Angular 2中根据这个我试过

getTasks():可观察{
返回这个.http.get('data/tasks.json').map(response=>{
返回可观测的(response.json()).delay(1000);
});
}

getTasks():可观察{
返回此.http.get('data/tasks.json').map(响应=>{
返回可观察的。创建((obs:Observable)=>{
下一步(response.json());
obs.complete();
).延迟(1000);
});
}

但是有TypeScript编译错误或
getTasks().subscribe
获取可观察而非任务集合。看起来我遗漏了什么。请帮助。谢谢。

错误是由于类型不匹配造成的。您的
gettask
方法声明返回类型
可观察
,但是map方法返回的是可观察而不是数组(类型为Task[])。您只需将可观测值作为正常值返回,然后添加延迟方法来延迟可观测值的发射

getTasks() : Observable<Task[]> {
    return this.http.get('data/tasks.json').map(response =>  {
       return response.json();  
    })
    .delay(1000);
}
getTasks():可观察{
返回此.http.get('data/tasks.json').map(响应=>{
返回response.json();
})
.延迟(1000);
}

错误是由于类型不匹配造成的。您的
gettask
方法声明返回类型
Observable
,但是map方法返回的是一个Observable,而不是数组(类型为Task[])。您只需正常返回Observable,然后添加延迟方法来延迟Observable发射

getTasks() : Observable<Task[]> {
    return this.http.get('data/tasks.json').map(response =>  {
       return response.json();  
    })
    .delay(1000);
}
getTasks():可观察{
返回此.http.get('data/tasks.json').map(响应=>{
返回response.json();
})
.延迟(1000);
}
getTasks() : Observable<Task[]> {
    return this.http.get('data/tasks.json').map(response =>  {
       return Observable.create((obs: Observable<Task[]>) => {
            obs.next(response.json());
            obs.complete();
       ).delay(1000);        
    });
}
getTasks() : Observable<Task[]> {
    return this.http.get('data/tasks.json').map(response =>  {
       return response.json();  
    })
    .delay(1000);
}