0
点赞
收藏
分享

微信扫一扫

js Promise理解,同时请求多个接口等

独孤凌雪 2022-01-06 阅读 40

Promise是异步执行的一种方法,有如下API:

Promise.resolve()
Promise.reject()
Promise.prototype.then()
Promise.prototype.catch()
Promise.all() // 所有的都有完成,相当于 且
Promise.race() // 完成一个即可,相当于 或
  1. Promise.resolve()的作用将现有对象转为Promise对象resolvedl;Promise.resolve('test')==new Promise(resolve=>resolve('test'))
  2. Promise.reject()也是返回一个Promise对象,状态为rejected;
  3. then() 成功回调
  4. catch():发生错误的回调函数。
  5. Promise.all()适合用于所有的结果都完成了才去执行then()成功的操作

一般用法:

let promise = new Promise((resolve,reject)=>{
    // 模拟执行请求接口
    getData().then((res)=>{
        // 标记成功后给定某个数据:res
        resolve(res)
    }).catch(e=>{
        // 标记失败后给定某个数据
        reject('发生错误')
    })
})
promise.then(res=>{
    console.log(res)
}).catch(e=>{
    console.log(e)
})

假如有一个需求,需要同时请求三个接口,三个接口全都返回数据后再做处理,则可以使用Promise.all()这个api。举个栗子:

let p1 =new Promise((resolve,reject)=>{
    // 模拟请求接口1
    getData1().then((res)=>{
        // 标记成功后给定某个数据:res
        resolve(res)
    }).catch(e=>{
        // 标记失败后给定某个数据
        reject('发生错误')
    })
})
let p2 = new Promise((resolve,reject)=>{
    // 模拟请求接口2
    getData2().then((res)=>{
        // 标记成功后给定某个数据:res
        resolve(res)
    }).catch(e=>{
        // 标记失败后给定某个数据
        reject('发生错误')
    })
})
let p3 = new Promise((resolve,reject)=>{
    // 模拟请求接口3
    getData3().then((res)=>{
        // 标记成功后给定某个数据:res
        resolve(res)
    }).catch(e=>{
        // 标记失败后给定某个数据
        reject('发生错误')
    })
})
// results的结果是一个数组,分别代表三个接口的数据
Promise.all([p1, p2, p3]).then((results)=>{
    console.log('success:'+results)
}).catch(e=>{
    console.log("error")
    console.log(e)
})
举报

相关推荐

0 条评论