JavaScript之异步操作-promise

211 阅读1分钟

Promise

Promise对象用于表示一个异步操作的最终状态(成功or失败)

Promise有三种状态:

  • pending:初始状态
  • fulfilled:操作成功完成
  • rejected:操作失败

promise.all(iterable)

返回一个promise对象,iterable中的promise全部执行成功才会返回执行成功,只要有一例失败则全部返回失败

promise.rece(iterable)

返回一个promise对象,iterable中的promise中有一例执行成功或失败,就会返回成功或失败

promise.reject(reason)

返回一个带有拒绝原因reason参数的Promise对象
Promise.reject("errorInfo").catch((value)=>{console.log(value)})
Promise.reject("errorInfo").then(function(reason) {
  // 未被调用
}, function(reason) {
  console.log(reason); // "errorInfo"
});

promise.resolve()

语法:
    promise.resolve(value)
    promise.resolve(promise)
    promise.resolve(thenable)
//resolve一个value
Promise.resolve('success').then((value)=>{
    console.log(value);//success
},(err)=>{
    console.error(err);//不会执行
})
//resolve另一个promise对象
//会原封不动的返回传入的promise对象
let promiseIn=Promise.reject('errorInfo');
let promiseResolve=Promise.resolve(promiseIn);
promiseResolve.then((value)=>{
    console.log(value);//不会执行
},(err)=>{
    console.error(err);//errorInfo
})
promiseResolve.catch((err)=>{
    console.log(err);//errorInfo
})
//resolve一个thenable对象(指的是具有then方法的对象),不是含有then方法的对象,会作为value传入
//会将这个对象转为promise对象,然后立即执行then方法
let thenable={
    then:()=>{
        console.log('thenFunction');
    }
}
let p1=Promise.resolve(thenable);//thenFunction

promise.prototype.then(onFulfilled,onRejected)

promise对象返回成功执行onFulfilled方法,返回失败执行onRejected方法

promise.prototype.catch(onRejected)

promise对象只有返回失败时才会执行onRejected方法

promise.prototype.finally(onFinally)

无论promise对象返回执行成功、失败,都会执行onFinally函数
let promise=new Promise((resolve,reject)=>{
    let num=Math.ceil(Math.random()*10)
    if(num>5){
        resolve(num);
    }else{
        reject(num);
    }
});
promise.then((res)=>{
    console.log(res)
});
promise.catch((err)=>{
    console.error(err)
})