angular - 如何在订阅中返回值?
问题描述
我有以下方法,订阅里面的值是正确的,但是订阅范围之外,它是空白的。
getTranslation(text: string): string {
var translatedText: string = "";
this.translate.get(text).subscribe((text: string) => {
translatedText = text;
alert(translatedText);
});
alert(translatedText);
return translatedText;
}
解决方案
subscribe 可能是一个异步函数。无法从 subscribe 获取值并将其同步移动到外部范围,因为您不知道调用回调需要多长时间。
为了返回一个值,您还必须通过返回一个promisegetTranslation
来使方法异步。
将现有代码移动到回调中subscribe
function getTranslation(text: string): string {
return new Promise(async (resolve) => {
this.translate.get(text).subscribe((text: string) => {
resolve(text);
});
});
}
推荐阅读
- button - 如何在 mediawiki 1.30 的每个子标题的末尾自动添加一个按钮?
- c# - SOAP XML 消息
- objective-c - 在字符串中的每个字符后插入逗号?目标 C
- spring - 如果 Kafka 不可用,我如何杀死 Spring Boot 应用程序?
- sql - 存储过程突然挂起 - 是否嗅探了参数?
- rabbitmq - 通过“RawRabbit”进行两个控制台应用程序通信
- python - 在python日志记录中括号后填充字符串占位符
- linux - VSCode 多光标 Lubuntu
- bash - 用于从 Raspberry Pi 到 Amazon S3 的 FTP 文件传输的 Bash 脚本
- java - 在 Eclipse 中将 Java/JavaFX 与 Maven 一起使用