Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 等待可观察到的完成_Angular_Ionic Framework_Observable_Angular2 Observables - Fatal编程技术网

Angular 等待可观察到的完成

Angular 等待可观察到的完成,angular,ionic-framework,observable,angular2-observables,Angular,Ionic Framework,Observable,Angular2 Observables,我从承诺中返回可观察到的东西 首先,返回一个翻译 translateAction(t):可观察{ 常量参数={ 文本:t, SourceLanguageCode:“en”, 目标语言代码:“es” }; 让actionPromise=this.translate.translator.translateText(params.promise(); 让我们观察到( actionPromise.then((数据)=>{ 返回(data.TranslatedText); }).catch((错误)=>

我从承诺中返回可观察到的东西

首先,返回一个翻译

translateAction(t):可观察{
常量参数={
文本:t,
SourceLanguageCode:“en”,
目标语言代码:“es”
};
让actionPromise=this.translate.translator.translateText(params.promise();
让我们观察到(
actionPromise.then((数据)=>{
返回(data.TranslatedText);
}).catch((错误)=>{
控制台日志(err);
返回错误;
})
);
回归观察;
}
我想将该文本保存到存储器中并返回翻译(else块)

让st=this.storage.get(“translationCache”);
让观察到的=可观察到的(
st.then((val)=>{
控制台日志(“alo?49”);
if(val&&val.hasOwnProperty(值)){
设v=值;
console.log(“Encontrado en memoria:”);
console.log(val[v]);
返回值[v];
}否则{
控制台日志(“alo?60”);
设v=值;
让textT=this.translateAction(v).subscribe(t=>{
textT=t;
如果(val==null){
val={};
}
val=Object.assign(val,{[v]:textT});
this.storage.set('translationCache',val);
console.log(“traduccion añadida”);
console.log(v+“:”+textT);
返回textT;
},err=>{console.log(err)});返回textT;
}
})
);
回归观察;
预期行为:将文本保存在存储器中,然后返回翻译


当前行为:过一段时间后保存数据,但返回[Object Object],因为它没有等待翻译文本行
let textT=this.translateAction(v).subscribe(…
将订阅分配给
textT
,然后下一行
返回textT;
返回该订阅。只有在以后,
textT
才会被重新分配到已翻译的字符串。第二个代码块的任何方法都需要是异步的,即返回和可观察的、承诺的或具有回调。例如:

doStuff():可观察{
...
设v=值;
返回此.translateAction(v).pipe(
水龙头({
下一步:t=>{
设textT=t;
如果(val==null){
val={};
}
val=Object.assign(val,{[v]:textT});
this.storage.set('translationCache',val);
console.log(“traduccion añadida”);
console.log(v+“:”+textT);
},
错误:err=>{console.log(err)}
})
);
}

doStuff()
返回一个可观察的

很抱歉,我想我错过了一些重要的东西,从
存储中的承诺中包含的所有内容。获取
然后它从承诺中返回一个可观察的,我将编辑问题中的代码。我尝试了这种方法,但它现在没有保存到存储中,它只是显示了[Object]