Promise是做什么的?
Promise是异步编程的一种解决方案。
Promise用法:
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数。
resolve函数作用:将Promise对象的状态从“未完成”变为“成功”,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。
reject函数作用:将Promise对象的状态从“未完成”变为“失败”,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
const promise = new Promise(function(resolve,reject){
if(/*异步操作成功*/){
resolve(value)
}else{
reject(error)
}
})
Promise自己身上有all、reject、resolve方法,原型上有then、catch方法。
1. Promise.prototype.then()
then()的第一个参数是成功状态的回调函数,第二个参数是失败状态的回调函数。then()返回的是一个全新的Promise实例,因此可采用链式写法。
2. Promise.prototype.catch()
Promise.prototype.catch()方法是.then(null, rejection)或.then(undefined, rejection)的别名,用于指定发生错误时的回调函数。
3. Promise.resolve()
Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))
4. Promise.reject()
const p = Promise.reject('出错了');
// 等同于
const p = new Promise((resolve, reject) => reject('出错了'))
p.then(null, function (s) {
console.log(s)
}); // 出错了
5.async await
async await也是异步编程的一种解决方案,他不需额外的调用会自动执行并输出结果,它返回的是一个Promise对象。
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
async单独使用的时候,放在函数前面表示这个函数是一个异步函数,如果async函数有返回结果,必须要用.then()方法来承接
async await搭配使用的时候,await是等待此函数执行后,再执行下一个,可以把异步函数变成同步来执行(前提是await后的函数是返回的promise,如果跟的是普通函数就不会同步执行),控制函数的执行顺序。await一定要搭配async使用。