javascript - 如何在 Angular/Ionic Observable/Promise 中的 AsyncPipe 中返回默认值
问题描述
我使用 aws translate 做了一个异步管道来显示带有承诺的翻译文本并且它可以工作,但是我需要定义用户是否想要原始文本,或者它是否想要翻译,所以我向提供者添加了值isActive: boolean = false
和if
条件所以如果isActive
是false
,只返回默认值,但我得到这个:
PipelinePage.html:87 ERROR Error: InvalidPipeArgument: 'In Progress' for pipe 'AsyncPipe'
translate.pipe.ts //管道
import { Pipe, PipeTransform } from '@angular/core';
import { TranslateProvider } from "../../providers/translate/translate";
@Pipe({
name: 'translate',
})
export class TranslatePipe implements PipeTransform {
constructor(public translate: TranslateProvider){}
transform(value: string, ...args) {
if(this.translate.isActive === true){
const params = {
Text: value,
SourceLanguageCode: "en",
TargetLanguageCode: "es"
};
let actionPromise = this.translate.translator.translateText(params).promise();
return actionPromise.then((data) => {
return data.TranslatedText;
}).catch((err) => {
console.log(err);
});
} else {
return value;
}
}
}
translate.ts //提供者
export class TranslateProvider {
...
public isActive: boolean = false;
...
}
在模板上:
translate | async
如果 isActive 为 false,我如何返回默认值?先感谢您。
解决方案
async
管道需要一个 Promise 或一个 Observable 作为输入,但是当 isActive 是你时,false
你只是返回一个字符串。
因此,在您的 TranslatePipe 中,return value;
您需要返回一个带有值作为内容的 Promise,而不是使用。
您还可以尝试将整个转换方法标记为async
,这应该会自动将任何返回值放入 Promise。所以它应该看起来像这样:
async transform(value: string, ...args) {
if(this.translate.isActive === true){
const params = {
Text: value,
SourceLanguageCode: "en",
TargetLanguageCode: "es"
};
let actionPromise = this.translate.translator.translateText(params).promise();
actionPromise.then((data) => { // <- Dont return the promise but return in the promise (you could also use await)
return data.TranslatedText;
}).catch((err) => {
console.log(err);
});
} else {
return value;
}
}
推荐阅读
- mysql - MYSQL 5.7 和 PopSQL
- ms-access - 具有动态列数的报告
- python - 使用 pyInstaller 创建应用程序的文件夹结构和导入问题
- cpanel - 安装 MediaWiki 的结果搞砸了
- angular - Angular - ngx-intl-tel-input 中的标志和宽度问题
- just-audio - 我如何使用实验性的未来波形可视化器
- angular - 如何在 Angular 中本地测试嵌套库?
- list - Terraform - 将实体 ID 附加到 Vault 身份组
- python-3.x - 在熊猫中垂直连接/合并文件
- navigation - 带有传单的全景图像链接根据图像旋转 HTML、CSS、