1、它被设计成一个全局构造函数
2 、这个函数创建出来的对象 是一个特殊的数据容器
3、这个数据容器内部有三种状态: 等待 ==>产生的正确数据 产生了错误的数据
4、创建对象时要求传一个函数参数==>也就是在这个函数中处理耗时业务,一般用法:
new Promise((resolve,reject)=>{resolve(),reject()})
调用函数的resolve参数==>这时实际上就是调用了then方法传入的函数 (两者只是间接的关系)
调用函数的reject参数==>这时实际上就是调用了catch方法传入的函数 (一样)
- var p1=new Promise((resolve,reject)=>{
- setTimeout(()=>{
- resolve('hello')
- },1000)
- // reject("业务出错了") 同理,resolve和reject只能存在一个
- })
- console.log(p1)
-
- p1.then((data)=>{
- console.log(data,111)
- },(err)=>{
- console.log(err,222)
- })
-
- p1.then((data)=>{ //第二种写法,但第二种会捕获错误,并继续让下面的代码正常运行
- console.log(data,112)
- })
- .catch((err)=>{
- console.log(err)
- })
结果:等待1s后出现
一、new Promise((result,faild)=>{})在处理耗时操作的过程中 会有3个状态
1.处理中 没有调用resolve,reject这个方法
2.生成正确的结果 调用resolve
3.生成错误结果 调用reject
二、 then函数有一个返回值:一定是一个新的Promise
1、返回的新的Promise对象 是由cb(传入的回调)函数的返回值决定的
2、cb函数的返回值也是一个Promise对象 那么then函数的返回值 就是它
3、 cb函数的返回值不是一个Promise对象 那就就把cb的返回值封装为Promise对象 然后作为then的返回值
1.给函数一个async来修饰
2.函数内部用await来修饰带promise设计的异步函数 就会直接得到结果 不需要调用then方法来获取数据
3.async修饰的函数的返回值是一个then方法调用的返回值(同promise)