Promise 的使用

Promise是解决异步的一种方案,可以更优雅的解决多个请求回调的问题,提高代码可读性。有 async/await 和 axios 现在基本用不到 Promise。(axios 拥有 Promsie 相同的 API)

1.提高可读性,看上去舒服一点。
function request(url,successFun, errorFun) {
    $.ajax({
        type: 'GET',
        url:url,
        param: {},
        success: successFun,
        error: errorFun
    });
}

request('url1',(res)=>{ console.log("成功后做一些什么")},(err)=>{console.log("失败了做一些事") })

//使用 Promise
function requestPromise (url) {
    return new Promise((resolve, reject)=> {
      $.ajax({
         type: 'GET',
          url: url,
          param: {},
          success: res => { resolve(res ) },
          error: err => { reject(err) }
      });
    });
}
requestPromise('url1').then((res) => { console.log("成功后做一些什么") }).catch((err) => {console.log("失败了做一些事")})
链式编程的意思, .then调用多个请求(都是Promise实例)
requestPromise('url1').then((res) => { 
    console.log("成功后我再走 url2 接口")
    return requestPromise('url2')
 }).then((res) => { 
    console.log("成功后我再走 url3 接口")
    return requestPromise('url3')
}).catch(err => { console.log("报错触发,后面都不在执行") })
2.Pomise.all()

Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组(顺序和Promise实例参数顺序一致),而失败的时候则返回最先被reject失败状态的值。

let p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('我是p1')
  },1000)
})

let p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('我是p2')
  }, 500)
})

Promise.all([p1, p2]).then((result) => {
  console.log(result)               //['我是p1', '我是p2']
}).catch((error) => {
  console.log(error)
})
3.Promise.race()

传参和 all()一样,不同的是无论 resolve 还是 reject 只返回第一个有结果的值,race -- 比赛。

4.Promise.resolve()

将一个包含请求的对象转为 Promise 对象。或者你想使用 .then() 做后续操作。
在主线程任务执行完之后立马执行 Promise.resolve 的 .then ,最后执行其他异步任务。可以用来优化一些视图更新。

Promise.resolve(data ? data : getDataFn()).then() 
5.Promise.reject()

也是可以将一个对象转为 Promise 对象,抛出错误。暂时没发现有什么用。。。

6.其他

Promise.resolve 比 new Promise 快。
Promise 的API都是微任务。
最好使用 .then() 操作回调。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么叫promise? 那我们为什么要使用promise? 比如我们在工作中经常会碰到这么一个需求,比如我使用aj...
    紫陌兰溪阅读 14,933评论 2 5
  • Promise 是异步编程的一种解决方案。简单来说 Promise 就是一个容器,里面保存着某个未来才会结束的异步...
    点融黑帮阅读 4,149评论 0 13
  • 前言 本文旨在简单讲解一下javascript中的Promise对象的概念,特性与简单的使用方法。并在文末会附上一...
    _暮雨清秋_阅读 6,625评论 0 3
  • 在JavaScript的世界中,所有代码都是单线程执行的。 由于这个“缺陷”,导致JavaScript的所有网络操...
    HZ_quan阅读 1,423评论 0 0
  • //本文内容起初摘抄于 阮一峰 作者的译文,用于记录和学习,建议观者移步于原文 概念: 所谓的Promise,...
    曾经过往阅读 5,000评论 0 7