2017-09-13 40 views
0

我在我的角度應用程序中使用了ngx-translate服務進行翻譯。我想創建一個方法來接受需要返回的字符串的路徑。我的方法是這樣的:無法從異步調用中檢索數據

public translateString(parameter: string): string { 
    let message = ""; 
    this.translate.get(parameter).subscribe((response) => { 
     message = response; 
    }); 
    return message; 
} 

但它總是返回空字符串,我認爲這個問題是訂閱調用,這樣返回的消息被消息之前=響應執行。任何解決方案

回答

0

數據不是同步可用的。您需要返回observable,然後調用者可以訂閱一旦消息可用就做他們需要做的事情。

public translateString(parameter: string): Observable<String> { 
    return this.translate.get(parameter); 
} 

// and then used like this: 
SomeService.translateString('hello world') 
    .subscribe(message => { 
     console.log(message); 
    }) 
-1

您需要返回內部subscribe.Like此訊息:

public translateString(parameter: string): string { 
    let message = ""; 
    this.translate.get(parameter).subscribe((response) => { 
     message = response; 
     return message; 
    }); 
} 
+0

外部函數(translateString)根本沒有返回任何東西,所以這段代碼實際上什麼都不做。 –

+0

@NicholasTower它正在返回字符串,請參閱第一行。 –

+0

你在談論類型聲明嗎?是的,它*聲稱*返回一個字符串。但是沒有實際的回報聲明。 –

0

使用instant

它不需要任何觀測。

this.message = this.translate.instant('Language') 
+0

這種方式它返回鍵而不是值:/ – OjamaYellow

+0

你已經試過了嗎?在我的情況下,我正在發送上面提到的密鑰並獲得它的價值。 – k11k2

+0

是的,我在en.json文件中有翻譯...當我調用this.translate.instant(「en.json中的鍵」)時,它返回鍵而不是值。 – OjamaYellow