2017-08-24 78 views
1

我爲我的應用程序創建了一個自定義管道,它將用戶標識作爲參數並返回用戶名。爲了讓所有的用戶都能進行api調用。因此,我想從api獲取用戶列表後運行循環。我正在做這樣的事情:從自定義管道返回異步值:Angular4

transform(userId: number): any { 
    this.userInfoService.getUsers().subscribe(
    data => { 
     this.allUsers = data; 
     for(let user of this.allUser) { 
     if(user.id === userId) { 
     return user.userName; 
     } 
     } 
     return null; 
    }, 
    error => { 
     console.log('Error'); 
    }) 
} 

但我沒有看到任何價值的用戶界面,當我使用這個管道。我懷疑的問題是異步返回的值。任何建議如何解決這個問題?

回答

2

我加了一個return,改變subscribemap

transform(userId: number): any { 
    return this.userInfoService.getUsers().map(
    data => { 
     this.allUsers = data; 
     for(let user of this.allUser) { 
     if(user.id === userId) { 
     return user.userName; 
     } 
     } 
     return null; 
    }, 
    error => { 
     console.log('Error'); 
    }) 
} 

然後用異步管

{{userId | myPipe | async}} 
+0

的作品就像一個魅力用它!但是,是否有任何其他解決方案,每次我將userId轉換爲userName時,都不會進行api調用?因爲如果我在* ngFor中有很長的userIds列表,它會爲每個userId做api調用。 – Aiguo

+0

不確定「每次我將userId轉換爲用戶名」時,你的意思都完全相同。您可以使用緩存結果的共享服務。這可能有助於在這裏https://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an-angular-2-http-network-call-in/ 36291681#36291681 –