javascript – angular 2如何从订阅返回数据

这就是我想要做的。

@Component({
   selector: "data",
   template: "<h1>{{ getData() }}</h1>"
})

export class DataComponent{
    this.http.get(path).subscribe({
       res => return res;
    })
}

如果在DataComponent中调用了getData,你可以建议将它分配给像.data = res之类的变量,并使用我喜欢的{{data}}。但我需要像{{getData}}那样用于我自己的目的。请建议我?

最佳答案
您无法直接返回该值,因为它是异步调用。
异步调用意味着它在后台运行(实际安排在以后执行),而代码继续执行。

您也不能直接在类中使用此类代码。它需要移动到方法或构造函数中。

你可以做的不是直接订阅()而是使用像map()这样的运算符

export class DataComponent{
    someMethod() {
      return this.http.get(path).map(res => {
        return res.json();
      });
    }
}

此外,您可以将多个.map与相同的Observable组合在一起,因为这有时可以提高代码清晰度并使事物保持分离。例:

validateResponse = (response) => validate(response);

parseJson = (json) => JSON.parse(json);

fetchUnits() {
    return this.http.get(requestUrl).map(this.validateResponse).map(this.parseJson);
}

这样一个observable将返回调用者可以订阅

export class DataComponent{
    someMethod() {
      return this.http.get(path).map(res => {
        return res.json();
      });
    }

    otherMethod() {
      this.someMethod().subscribe(data => this.data = data);
    }
}

呼叫者也可以在另一个班级。这只是为了简洁起见。

data => this.data = data

res => return res.json()

是箭头功能。它们与正常功能类似。当数据从响应到达时,这些函数被传递给subscribe(…)或map(…)以从observable调用。
这就是无法直接返回数据的原因,因为当someMethod()完成时,尚未收到数据。

转载注明原文:javascript – angular 2如何从订阅返回数据 - 代码日志