我正在从诺言中归还可观察的事物
首先返回翻译的那个
translateAction(t): Observable<any>{
const params = {
Text: t,
SourceLanguageCode: "en",
TargetLanguageCode: "es"
};
let actionPromise = this.translate.translator.translateText(params).promise();
let observe = Observable.fromPromise(
actionPromise.then((data) => {
return (data.TranslatedText);
}).catch((err) => {
console.log(err);
return err;
})
);
return observe;
}
而且我想将该文本保存到存储中并返回翻译
let v = value;
let textT = this.translateAction(v).subscribe(t => {
textT = t;
if(val === null){
val = {};
}
val = Object.assign(val, {[v] : textT});
this.storage.set('translationCache', val);
console.log("traduccion añadida");
console.log(v + ":" + textT);
return textT;
},err => {console.log(err)}); return textT;
预期的行为:将文本保存在存储中,然后返回翻译。
当前行为:过一会儿保存数据,但由于它不等待翻译的文本,所以返回了[Object Object]
[C0行]将订阅分配给let textT = this.translateAction(v).subscribe(...
,然后下一行textT
返回该订阅。直到以后return textT;
才重新分配给翻译后的字符串。第二个代码块需要执行的任何函数都是异步的,即return和Observable,Promise或具有回调。可能:
textT
function doStuff(): Observable<any> {
let v = value;
return this.translateAction(v).pipe(
tap({
next: t => {
let textT = t;
if (val === null) {
val = {};
}
val = Object.assign(val, { [v]: textT });
this.storage.set('translationCache', val);
console.log("traduccion añadida");
console.log(v + ":" + textT);
},
error: err => { console.log(err) }
})
);
}
返回一个可观察值