promise

Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败

Promise的基本用法
  • 声明一个Promise对象
// 方法1
let promise = new Promise ( (resolve, reject) => {
    if ( success ) {
        resolve(a) // pending ——> resolved 参数将传递给对应的回调方法
    } else {
        reject(err) // pending ——> rejectd
    }
} )

// 方法2
function promise () {
    return new Promise ( function (resolve, reject) {
        if ( success ) {
            resolve(a)
        } else {
            reject(err)
        }
    } )
}

注意:实例化的Promise对象会立即执行

Promise的其他api

Promise.resolve() / Promise.reject()
用来包装一个现有对象,将其转变为Promise对象,但Promise.resolve()会根据参数情况返回不同的Promise:
参数是Promise:原样返回
参数带有then方法:转换为Promise后立即执行then方法
参数不带then方法、不是对象或没有参数:返回resolved状态的Promise
Promise.reject()会直接返回rejected状态的Promise

Promise.all()
参数为Promise对象数组,如果有不是Promise的对象,将会先通过上面的Promise.resolve()方法转换

var promise = Promise.all( [p1, p2, p3] )
promise.then(
    ...
).catch(
    ...
)

当p1、p2、p3的状态都变成resolved时,promise才会变成resolved,并调用then()的已完成回调,但只要有一个变成rejected状态,promise就会立刻变成rejected状态

Promise.race()

var promise = Promise.race( [p1, p2, p3] )
promise.then(
    ...
).catch(
    ...
)

“竞速”方法,参数与Promise.all()相同,不同的是,参数中的p1、p2、p3只要有一个改变状态,promise就会立刻变成相同的状态并执行对于的回调

Promise.done() / Promise. finally()
Promise.done() 的用法类似 .then() ,可以提供resolved和rejected方法,也可以不提供任何参数,它的主要作用是在回调链的尾端捕捉前面没有被 .catch() 捕捉到的错误
Promise. finally() 接受一个方法作为参数,这个方法不管promise最终的状态是怎样,都一定会被执行

  • 个人理解:
    1、你需要每次都要写创建axios实例,调用接口后在里面处理返回的数据
    2、Promise会自动处理数据,不需要去主动执行她
    3、能把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数
    4、用promise,把回调函数处理数据的内容写在了then里
    5、对深层回调效果好一点,要不就得一直嵌套,比如,有若干个异步任务,需要先做任务1,如果成功后再做任务2,任何任务失败则不再继续并执行错误处理函数。
job1.then(job2).then(job3).catch(handleError);

6、用promise,可以在then处理数据,不用promise就不能在then里处理数据,需要传回调函数
7、Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了

你可能感兴趣的:(promise)