
如何在 Typescript 中定义 Promise 的返回值类型?
如图所示,可以看到 Promise 中, reslove() 方法传入的是 number 类型。但是,Typescript 感知到的类型却是 Promise<{}> 。如何让
通过 Promise 的构造函数,声明返回值的泛型类型。
修改 reslove 的类型定义
Promise 的类型定义如上,我们可以看到 Promise 返回值的类型定义,可以由两部分决定。第一个是构造时的泛型值,第二个是 reslove 函数 value 值得类型。
场景:有时候我们同时需要两个接口返回的数据才能实现进一步 *** 作,下面介绍2种方法
方法1:利用js回调嵌套的方式
为了实现嵌套调用,另外定义一个函数,total,保证接口返回数据成功后执行打印百分比 *** 作
实现如下:
方法2:利用es6的promise解决回调地狱问题
每个异步接口 返回一个promise对象
利用promiseeall方法保证接口数据成功返回再执行 *** 作
Promise用来表示延迟 *** 作也就是异步 *** 作的结果
Promise 对象代表了未来将要发生的事件,用来传递异步 *** 作的消息
Promise主要用于异步计算
Promise 创建 Promise 创建
pending 是 初始状态
fulfilled 是 *** 作成功的状态
rejected 是 *** 作失败的状态
1、接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败)
2、then()返回一个新的Promise实例,所以它可以链式调用
(1)如果then方法中回调函数返回一个值那么then返回的Promise将会成为Resolved状态,并且将返回的值
作为Resolved状态的回调函数的参数值。
var p = new Promise(function (resolve, reject) {
resolve('fun');
});
3、当前面的Promise状态改变时,then()根据其最终状态,选择特定的状态响应函数执行
4、状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null;
5、如果返回新的promise,那么下一级then()会在新的promise状态改变之后执行
6、如果返回其他任何值,则会立即执行下一级then()
then的情况
1、因为then()返回的还是Promise实例
2、会等里面的then()执行完,再执行外面的
普通函数 简写 就是 箭头函数
当有多个接口需要顺序调用时
顺序调用是指 : 接口1返回的数据 ,作为请求接口2的参数 ,接口2返回的数据 ,又作为请求接口3的参数
promise基本用法
实例化时 new Promise(回调函数) ,传入的参数是一个回调函数
这个回调函数有两个参数分别是 resolve 和 reject
resolve 用来把 promise对象 变成 成功状态 ,并返回结果
reject 用来把 promise对象 变成 失败状态 ,并返回结果
promise实例 请求接口后,要么变为 成功状态 ,要么变为 失败状态
通常的用法是封装一个方法 request(url,params) 用来获取promise对象
传入 接口地址 和 参数 就能得到一个promise对象
需要在第一个then()设置的 回调内 return 一个 新的promise 对象
promisethen() 链式调用 的方式 相比于 普通 ajax()回调地狱 ,有了很大的改进
但是一连串的的 then()then()then() 看上去也不方便
改成 async 和 await 方式
await 必须出现在 async 声明的方法内部 ,不能单独出现
我是个干后端的 ,上边有不对的地方请标明
我们可以看出 catch 可以捕获到 then 中的错误,但是then第二个参数只能捕获上一个Promise对象的错误。原因是 then 方法第二个参数只能捕获当前Promise对象或上一个Promise的错误,而不能捕获then里面的错误。
我们知道async/await 的优势在于处理 then 链,每一个then的第一个参数都是前一个promise的返回值。理解了上面的Promise Chain链就理解了async
await 是否return的区别
一般来讲,有以下的名词约定:
去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范。作为ES6中最重要的特性之一,我们有必要掌握并理解透彻。本文将由浅到深,讲解Promise的基本概念与使用方法。
1、主要用于异步计算
2、可以将异步 *** 作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和 *** 作promise,帮助我们处理队列
同步:假设你去了一家饭店,找个位置,叫来服务员,这个时候服务员对你说,对不起我是“同步”服务员,我要服务完这张桌子才能招呼你。那桌客人明明已经吃上了,你只是想要个菜单,这么小的动作,服务员却要你等到别人的一个大动作完成之后,才能再来招呼你,这个便是同步的问题:也就是“顺序交付的工作1234,必须按照1234的顺序完成”。
异步:则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作,。等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。
AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。
总结 :promiseall的使用场景就是可以同时处理多个异步请求并控制他们返回结果的顺序
注意:promiseall中的任何一个请求,都将不会有返回结果
1、接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败)
2、then()返回一个新的Promise实例,所以它可以链式调用
3、当前面的Promise状态改变时,then()根据其最终状态,选择特定的状态响应函数执行
4、状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null;
5、如果返回新的promise,那么下一级then()会在新的promise状态改变之后执行
6、如果返回其他任何值,则会立即执行下一级then()
then()里面有then()的情况
1、因为then()返回的还是Promise实例
2、会等里面的then()执行完,再执行外面的
promise有三种状态:pending/reslove/reject 。pending就是未决,resolve可以理解为成功,reject可以理解为拒绝。
一个简易的promise例子:
promise的最终状态会凝固,成功了以后即便再执行reject('failed')状态也不会改变。
第一种就是上面的例子:
第二种就是把第一种方法的第二个函数拿出来做为catch,效果和第一种一样:
第三种,也可以只单独接收一种状态:
promise的 then 方法之后会继续返回一个promise对象
例子如下:
使用node执行后的结果如下:
从结果我们可以看出:使用then方法之后会返回一个promise对象,可以继续用then方法调用,再次调用所获取的参数是上个then方法return的内容;同时,我们还看到p先被打印出来,证明promise本身就是异步的,而且p本身也是一个pending状态的promise对象。
上面的这个例子只是一种情况,即第一次then之后所返回promise不会出现reject的状态,但如果我们在第一次then之后再手动返回一个可能包含reject状态的promise的话,那么错误链式调用过程中的错误处理就是大问题了,因为第二次then是不带错误处理机制的,这就要求我们在promise里的reject状态里直接写上对应的错误处理机制。具体的例子可以参见下篇文章。
上面的例子表示: 我们可以通过Promiseresolve()将一个字符串、数字或者对象等转换成一个成功状态的Promise对象。
但是如何我们将一个promise对象作为参数传递给Promiseresolve()方法会怎么样呢?
从结果上看: 将一个promise对象传递给Promiseresolve()方法会被直接返回。
使用方法和Promiseresolve一致。
以上就是关于如何在Typescript中定义Promise的返回值类型全部的内容,包括:如何在Typescript中定义Promise的返回值类型、es5与es6的promise分别实现等待多个接口返回数据执行相应 *** 作(4399笔试)、Promise的基本语法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)