2017-09-13 38 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