2017-04-11 31 views
0

我讀過關於observables和它對Promise的諸多優點。我正在開發一個無限的滾動角度,我發現這個代碼:https://github.com/Hacklone/angular2-cool-infinite-grid但實現與Promises完成,所以我想重寫代碼,但使用Observable。 如何開始?然後如何消費?如何將Promise方法轉換爲angular2中的Observable?

這是在實現中使用的方法:

private async getItems(fromIndex: number, numberOfItems: number): Promise<any[]> { 
    try { 
     const result = this.itemIterator.next(fromIndex, numberOfItems); 
     if (!result) { 
     return []; 
     } 
     if (typeof (result.value.then) === 'function') { 
     return await result.value; 
     } 
     else if (result.value instanceof Array) { 
     return result.value; 
     } 
     return []; 
    } 
    catch (e) { 
    console.log(e); 
    } 
    return []; 
} 

回答

1

文檔做到這一點

private async getItems(fromIndex: number, numberOfItems: number): Observable<any[]> { 
    return Observable.create(observer => { 

    try { 
     const result = this.itemIterator.next(fromIndex, numberOfItems); 
     if (!result) { 
     observer.next([]); 
     observer.complete(); 

     return; 
     } 
     if (typeof (result.value.then) === 'function') { 
     let value = await result.value; 
     observer.next(result.value); 
     observer.complete(); 

     return; 

     } 
     else if (result.value instanceof Array) { 
     observer.next(result.value); 
     observer.complete(); 

     return; 
     } 
     observer.next([]); 
     observer.complete(); 

    } 
    catch (e) { 
    console.log(e); 
    observer.next([]); 
    observer.complete(); 
    } 

    }); 
} 
相關問題