等待可观察的结果

问题描述 投票:0回答:1

我正在从诺言中归还可观察的事物

首先返回翻译的那个

    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]

angular ionic-framework observable angular2-observables
1个回答
0
投票

[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) } }) ); } 返回一个可观察值

© www.soinside.com 2019 - 2024. All rights reserved.