2017-12-27 1179 views
1

为了教育目的,我需要模拟Angular 2中服务器的长响应。我有代码模拟Angular 2中的长响应

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

// using 
getTasks().subscribe(groups => { 
    this.tasks = groups; 
}); 

并且需要服务器响应至少1秒。在角1.5我这样做是

this.getTasks = function() { 
    return $http.get("data/tasks.json").then(function (response) { 
     return $timeout(function() { 
      return response.data; 
     }, 1000); 
    }; 
} 

在角2根据本post我试图

getTasks() : Observable<Task[]> { 
    return this.http.get('data/tasks.json').map(response => {    
     return Observable.of(response.json()).delay(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().subscribe获取和可观而不是任务收集。看起来我错过了一些东西。请帮忙。谢谢。

回答

4

错误是由于类型不匹配造成的。您的getTasks方法声明为返回类型Observable<Task[]>但是,map方法正在返回observable而不是数组(类型为Task [])。您只需要像常规那样返回observable,然后添加延迟方法以延迟可观察的发射。

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

很酷,非常感谢。 –