1.Promise 是异步编程的一种解决方案
那什么时候我们会来处理异步事件呢?
一种很常见的场景应该就是网络请求了。
我们封装一个网络请求的函数,因为不能立即拿到结果,所以不能像简单的3+4=7一样将结果返回。
所以往往我们会传入另外一个函数,在数据请求成功时,将数据通过传入的函数回调出去。
如果只是一个简单的网络请求,那么这种方案不会给我们带来很大的麻烦
2.promise的使用
/什么情况下用到promise // 一般情况下是有异步操作的时候,使用Promise对这个异步操作进行封装 new Promise((resolve,reject)=>{ setTimeout(()=>{ //成功的时候调用 处理代码在then //resolve('liu') //失败的时候调用reject //处理代码在catch reject('error message') },1000) }).then((data)=>{ console.log(data); }).catch((err)=>{ console.log(err) })
3.
new Promise((resolve ,reject)=>{ setTimeout(()=>{ resolve('aaa') },1000) }).then((res)=>{ console.log(res); // 1 return Promise.reject('error messsage') //2 throw 'error message33' //直接执行最后的catch模块 }).then(res=>{ console.log(res); return new Promise(resolve=>{ resolve(res+'2222') }) }).then(res=>{ console.log(res); }).catch((err)=>{ console.log(err+"11111111"); })
4.
Promise.resovle():将数据包装成Promise对象,并且在内部回调resolve()
函数 Promise.reject():将数据包装成Promise对象,并且在内部回调reject()函数
也可以return Promise.resovle(data)改成了return data
5.当有多个promose请求的时候
可以使用promise.all
Promise.all([ new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve({name:'why',age:22}) },2000) }),new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve({name:'why',age:21}) },2000) }) ]).then(res=>{ console.log(res); })
会返回两个对象