Promise
//Promise为原生构造函数
let promiseObj = new Promise((resolve,reject)=>{
//操作
/*
成功:rosolve(成功的参数)
失败:reject(失败的参数)
*/
})
.then(resolve的参数)
.catch(reject的参数)
/*
promiseObj
可以进行存储状态,当执行后就会根据执行的结果改变该状态
状态status:pending 进行中 fulfilled 成功 rejected 失败
结果result:unfefined 成功的参数 或者 失败的参数
.then()返回一个新的promise对象,可以继续使用.then()方法
.catch()捕获错误,传递参数返回的错误信息,不传递参数则在控制台报错,当promise实例运行错误,之后的then不会被执行,因为没有新的promise对象被返回
*/
Promise主要解决的问题
主要解决了回调地狱的问题,将回调函数改为then方法的链式调用
什么是回调地狱?
在回调函数中继续使用回调,一个异步操作的入参往往是上一个异步的结果;这样会依赖上一个异步操作的结果去执行下一个异步操作
典型的就是setTimeout嵌套
/*
promise.then/catch() 都会返回一个promise对象:result
如果then/catch 方法直接返回一个值,这个值就是下一个then方法的成功回调的实参
如果then/catch方法返回一个promise对象,下面的then就是promise对象的处理结果
*/
Promise.resolve('直接调用成功').then(res => console.log(res))
相当于 new Promise(function(revlse){revolse('直接调用成功')})
Promise.reject(‘直接调用失败’).catch(err => log(err))
promise 可以存储状态 _固定result 不会改变
then/catch 方法返回的promise是新的
async await
async函数中 可以使用await获取Promise.resolve的结果
也就是await 将promise.then() 方法接收的值返回出来,此过程会调用.then()方法,这个实参就是resolve的参数,也就是promise执行了resolve传入的实参结果
失败的话拿不出来结果,所以一般await写在try catch里面;await拦截,在返回数据之前,会阻塞之后代码的执行