Promise对象的使用

Promise对象

Promise是一个用于异步处理任务的对象, 可以将一个任务交给Promise对象, 该对象会异步执行这个任务,任务执行结束后。 可以通过这个promise对象的状态来判断该任务是否执行成功。并且,可以为这个对象设置成功和失败的回调函数,在回调时,它会携带成功的结果和失败的信息,作为这个回调函数的参数来执行回调。

每一个promise对象有三个状态,等待(pending),成功(fullfilled)和失败(rejected),一旦变为成功或者失败后,它状态将不会再被改变。

Promise对象实例化时时,参数为一个函数对象,该函数有两个参数,形参名分别为resolve和reject,在实例化完成后,内部函数将会被异步调用执行,调用时被注入两个函数对象作为实参(执行成功的回调函数和执行失败的回调函数),这两个函数分别被resolve和reject接受。所以,当我们调用resolve或者reject时,任务会结束,并分别返回成功和失败状态。

// 创建一个Promise对象,该对象内部传入一个函数用于执行
let myPromise = new Promise(
    function(resolve, reject){
    // 向函数中注入两个函数,resolve调用表示成功,reject调用表示失败。
    console.log('do sth----')
    resolve("successful")       // 调用表示执行成功
})

setTimeout(()=>console.log(myPromise), 1000) // 一秒后查看promise执行情况

由于promise中调用的是 resolve("successful") ,所以返回的状态是成功,输出promise对象结果为 Promise { 'successful' } 如果调用 reject('error')将返回一个失败的状态,执行结果为Promise { <rejected> 'error' }

Pomise对象的方法

new = old.then(func(success), func(error)) 返回一个新的promise对象,old这个promise对象完成后,执行then方法,成功调用第一个函数并传入成功值,失败调用第二个函数并传入失败值,这个new的状态根据由两个函数决定,成功执行了则成功,执行失败了则失败
new = old.catch(func(error)) old失败后,将会执行catch,然后尝试使用func(error)处理这个失败,成功处理了,new为成功,处理失败,则new为失败
Promise.reject("msg") 该promise失败并返回失败信息
Promise.resolve("msg") 返回成功和成功信息

链式传递

调用promise对象的then方法会返回一个新的promise对象并同样的异步执行。这样可以作为一个链式传递。

let old = new Promise(
    (resolve, reject) => {
    // do something ... then
    resolve("this task is successful")
    // or reject('a error occured')
    }
)

let new = old.then(
    (value) => {console.log(value); return 123},
    (error) => {console.log(error); return 'error to success'}
)

let new2 = new.then(
    (value) => {Promise.reject("new error")}   // 成功时执行,但是返回一个错误
).catch(
    (error) => {return 'success'}   // 处理了这个失败
)

在上面的执行过程中,old对象调用了resolve代表着成功完成了任务,执行old.then()时会调用成功回调,第一个参数中的函数,并返回成功和成功值123,new对象的状态为成功,并携带成功值123,new对象继续执行new.then(),由于状态为成功所以执行第一个成功函数,但是在内部执行了Promise.reject(),则new2的状态为失败,并携带了失败值new error。返回临时的promise对象,这个对象执行了catch方法,捕捉这个失败并处理。最后返回 成功结果给new2对象,new成功,成功结果为success。

old.then不管old成功和失败都将执行对应的处理函数,处理函数成功执行,返回新的对象就是成功的,处理函数失败,这个新的对象就将失败。新的对象可以继续执行then方法并指定回调函数,一直向下执行。

old.catch只会在old为失败的时候执行,返回一个新的Promise,catch成功执行了解决了这个错误,新对象为成功,否则为失败。成功不会执行catch,这个新对象直接继承原来的promise状态信息。

原文地址:https://www.cnblogs.com/k5210202/p/13311426.html