2017-12-27 564 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

很酷,非常感謝。 –