当前位置: 首页 > news >正文

互动网站建设综合型b2b电子商务平台网站

互动网站建设,综合型b2b电子商务平台网站,网站seo优化技能,门户 网站 asp背景 Rxjs从V7开始废弃了toPromise, V8中会删除它。 原因 1:toPromise()只返回一个值 toPromise()将 Observable 序列转换为符合 ES2015 标准的 Promise 。它使用 Observable 序列的最后一个值。 例: import { Observable } from "rxjs"; ………

背景

Rxjs从V7开始废弃了toPromise, V8中会删除它。

原因

1:toPromise()只返回一个值

toPromise()将 Observable 序列转换为符合 ES2015 标准的 Promise 。它使用 Observable 序列的最后一个值。

例:

import { Observable } from "rxjs";
……
myObservable = new Observable<string>((observer) => {observer.next('Hello');observer.next('World');observer.complete();
});

获取并打印结果,toPromise()后只获取了最后一个结果'World'

this.myObservable.toPromise().then((value: string) => {console.log(`toPromise: ${value}`);
});

2:Observable 可能不产生值或产生多个值

Observable 和 Promise 之间的相似之处在于,两者都可能随着时间的推移产生值,但不同之处在于,Observable 可能不产生值或产生多个值,而 Promise在成功解析时仅产生一个值。

例:增加代码如下

this.myObservable.subscribe((value: string) => {console.log(`observable: ${value}`);
});

Observable产生两个值

如果我们注释掉下面代码,Observable不产生值但Promise产生一个undefined值,

myObservable = new Observable<string>((observer) => {// observer.next('Hello');// observer.next('World');observer.complete();
});

因此,在V7 中,Observable 的 toPromise() 方法的返回类型已修复,以更好地反映 Observable 可以产生零值的事实。对于某些项目来说,这可能是一个重大变化,因为返回类型已从 Promise<T> 更改为 Promise<T | undefined>。

3:toPromise() 方法名不明确

toPromise() 方法名称从未指示 Promise 将解析为发出的哪个值,因为 Observable 可以随时间产生多个值。转换为 Promise 时,您可能希望选择要选择哪个值 - 第一个到达的值或最后一个值。为了解决所有这些问题,rxjs决定弃用 toPromise(),

解决方案

作为已弃用的 toPromise() 方法的替代,您应该使用两个内置静态转换函数 firstValueFrom 或 lastValueFrom。

1:lastValueFrom

lastValueFrom 几乎与 toPromise() 完全相同,这意味着它将在 Observable 完成时解析为到达的最后一个值。

例:增加代码

const lastValue = await lastValueFrom(this.myObservable);
console.log(`lastValueFrom: ${lastValue}`);

但当 Observable 完成而未发出值时,行为有所不同。当 Observable 完成而未发出时,toPromise() 将成功解析为 undefined(因此返回类型会发生变化),而 lastValueFrom 将拒绝并返回 EmptyError。因此,lastValueFrom 的返回类型是 Promise<T>,就像 RxJS 6 中的 toPromise() 一样。

例:

myObservable = new Observable<string>((observer) => {// observer.next('Hello');// observer.next('World');observer.complete();
});
this.myObservable.toPromise().then((value: string | undefined) => {console.log(`toPromise: ${value}`);
});
const lastValue = await lastValueFrom(this.myObservable);
console.log(`lastValueFrom: ${lastValue}`);

2:firstValueFrom

但是,您可能希望在第一个值到达时立即获取它,而不等待 Observable 完成,因此您可以使用 firstValueFrom。firstValueFrom 将使用 Observable 发出的第一个值解析 Promise,并立即取消订阅以保留资源。

例:增加代码

const firstValue = await firstValueFrom(this.myObservable);
console.log(`firstValueFrom: ${ firstValue}`);

如果 Observable 完成且未发出任何值,firstValueFrom 也会拒绝并出现 EmptyError。

例:

myObservable = new Observable<string>((observer) => {// observer.next('Hello');// observer.next('World');observer.complete();
});
this.myObservable.toPromise().then((value: string | undefined) => {console.log(`toPromise: ${value}`);
});
const firstValue = await firstValueFrom(this.myObservable);
console.log(`firstValueFrom: ${ firstValue}`);

默认值

无论是哪种替代方案,我们都可以设置默认值,以防止EmptyError发生。

例:

const firstValue = await firstValueFrom(this.myObservable, { defaultValue: "''" });
console.log(`firstValueFrom: ${ firstValue}`);
const lastValue = await lastValueFrom(this.myObservable, { defaultValue: "''" });
console.log(`lastValueFrom: ${lastValue}`);

最后

仅当您知道 Observable 最终会完成时才使用 lastValueFrom 函数。如果您知道 Observable 将发出至少一个值或最终会完成,则应使用 firstValueFrom 函数。

如果源 Observable 未完成或未发出,您最终会得到一个挂起的 Promise,并且异步函数的所有状态都可能挂在内存中。

为了避免这种情况,请考虑添加 timeouttaketakeWhiletakeUntil 等。

http://www.tj-hxxt.cn/news/51176.html

相关文章:

  • 外贸工艺品网站建设英雄联盟韩国
  • 国际实时新闻最新消息seo的内容主要有哪些方面
  • 专业全网推广建站公司河南整站关键词排名优化软件
  • 群辉怎么做网站刚刚发生了一件大事
  • 用.net做的网站吗线上营销的方式
  • 企业融资难的原因及对策seo研究学院
  • 沪佳装饰门店地址广州优化营商环境条例
  • 河北衡水建设网站公司营口建网站的公司
  • 做网站ie10缓存网站建设的六个步骤
  • 上海门户网站建设方案seo综合查询怎么用
  • 网站风格要求青岛网站建设维护
  • 做兼职的网站贴吧seo是什么意思呢
  • 美丽寮步网站建设高性能seo搜索引擎入门教程
  • 高端网站建设股票发行ipo和seo是什么意思
  • 商城网站主要功能获取排名
  • 南昌建网站做优化公司百度小程序优化排名
  • 用自己的电脑建设网站网上推销产品去什么平台
  • 本溪做网站的公司培训心得简短50字
  • 多用户商城网站建设网站制作价格
  • wordpress主题google东莞快速优化排名
  • sem显微镜廊坊关键词排名优化
  • 赣州网站建设优化服务广州百度竞价外包
  • 广州网站建设哪家公司好百度推广400电话
  • 阿里云国际站官网推广赚钱项目
  • 盐城网站建设费用西安网站到首页排名
  • 香港免费云服务器南通seo网站优化软件
  • 仿站插件 wordpress金华百度seo
  • 90设计网站怎么绑定手机号南宁seo排名外包
  • 深圳团购网站设计哪家好近三天重大新闻摘抄
  • php网站后台验证码不显示排名优化seo公司