主页>技术社区>编程问答

如何返回来自响应的数据

eIT.com.cn 2023/3/17 11:23:37 阅读 3 次

打印


如何解决如何返回来自响应的数据?

服务,首先执行getName,然后当一些数据进入getPlace的else块中,而不是常规对象时,我得到者(如您在屏幕快照中所见),尽管从理论上讲,我赞成在赋值的地方进行更改。它可以?

解决方法

正如其他人所说,您不能将http请求(http.get)视为过程代码。 http请求是异步的,并且.pipe()方法中的代码仅在 从服务器返回数据后执行。

因此,您的getPlace()方法将无法通过调用data方法简单地返回_getPlace()

与其对抗这种工作方式,而是试图“修复”它。我建议您将两者都视为Observable。

我在类似情况下的代码如下:

服务

import { Observable,of,throwError } from 'rxjs';
import { catchError,tap } from 'rxjs/operators';

getProducts(): Observable<IProduct[]> {   if (this.products) {       return of(this.products);   }   return this.http.get<IProduct[]>(this.productsUrl)       .pipe(           tap(data => console.log('All Products',JSON.stringify(data))),tap(data => this.products = data),catchError(this.handleError)       );
}

组件

    this.productService.getProducts().subscribe({       next: (products: IProduct[]) => {           this.products = products;       },error: err => this.errorMessage = err   });

在这里,如果数据已经被缓存,它将使用RxJS of运算符将数据转换回Observable。

这样,您可以订阅getProducts的结果,就可以获取缓存的数据或获取的数据。

注意:另一个选择是声明式使用RxJS并利用RxJS shareReplay(1)运算符自动为您提供缓存。有关此技术的更多信息,请查看以下内容:

,

您必须订阅获取值的功能

django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:
ERRORS:
<class 'modules.teacher.admin.TeacherInline'>: (admin.E202) 'users.User' has no ForeignKey to 'teacher.Teacher'.
,

可观察到的是异步的,而javascript使用单线程环境。 如果javascript线程检测到任何异步任务,则将该任务交给封闭的环境(浏览器等),以在单独的线程中执行该任务。 因此,您的代码将像这样运行。

  1. 主线程调用this._getPlace()
  2. 检查语句this._getPlace()并将执行移交给其他线程。
  3. 主线程返回数据变量(为null)-这发生在步骤2完成之前。

这就是为什么返回的数据为null。

要解决您的问题,请使用map代替subscribe

 if(this._place.has(placeId)){   return this._places.get(placeId) } else {    let data: any = this.getPlace(placeId).map( place => {             //do something here             //return something             }).first()   return data; }





相关内容


热门栏目


特别声明


最新资讯
热讯排行



合作媒体友情链接
生活常识小贴士 软件开发教程 智慧城市生活网 息县通生活服务[移动版] 息县商圈[移动版] 美食菜谱
健康养生 法律知识 科技频道 电影影讯 留学考研学习 星座生肖|解梦说梦




关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明

      Copyright © 2023 eIT.com.cn. All Rights Reserved. 豫ICP备2022012332号