[英]Wait for Observable to finish
我從承諾中返回 Observables
第一個返回翻譯的這個
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;
}
我想將該文本保存到存儲中並返回翻譯(else 塊)
let st = this.storage.get("translationCache");
let observeSt = Observable.fromPromise(
st.then((val) => {
console.log("alo?49");
if(val && val.hasOwnProperty(value)){
let v = value;
console.log("Encontrado en memoria:");
console.log(val[v]);
return val[v];
}else{
console.log("alo?60");
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;
}
})
);
return observeSt;
預期行為:將文本保存在存儲中,然后返回翻譯。
當前行為:一段時間后保存數據,但返回 [Object Object],因為它不等待翻譯文本
行let textT = this.translateAction(v).subscribe(...
將訂閱分配給textT
然后下一行return textT;
返回該訂閱。只有稍后textT
重新分配給翻譯的字符串。無論哪種方法,第二代碼塊需要是異步的,即 return 和 Observable,Promise,或者有一個回調。比如可能:
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) }
})
);
}
doStuff()
返回一個 Observable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.