将 callback 转换成 Promise

本文要介绍的是如何将 callback 转换成 Promise,主要是写了一个具体的例子。
首先请大家浏览一下这篇文章:
如何把 Callback 接口包装成 Promise 接口

接下来我遇到的问题是,如何把像 jquery 方式的 ajax 请求改成 promise 呢?
因为 jquery 的 ajax 有两个回调函数:success 和 error 用来接收成功的请求和错误。
那么,我们就可以根据上文的思路,在 success 和 error 中处理 promise 的消息就好了。
于是就有了以下例子:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
// 将 jquery 的 ajax 方法封装为 Promise 方法
function post (url, params) {
  return new Promise(
    (resolve, reject) => {
      jQuery.ajax({
        url,
        data: {...params},
        type: "post",
        success: function (res) {
          resolve(res)
        },
        error: function (res) {
          reject(res)
        }
      }) 
    }
  )
}

// 异步请求,使用 then 和 catch
function asyncPost () {
  console.log('==== 异步请求 start =====')
  post(
    'http://removeUrl',
    {
      foo: 'qwwerwer'
    }
  ).then(res => {
    console.log(res)
  }).catch(err => {
    console.log(err)
  })
  console.log('==== 异步请求 end =====')
}

// 同步请求,使用 async 和 await
async function syncPost() {
  try {
    console.log('==== 同步请求 start =====')
    let res = await post(
      'http://removeUrl',
      {
        foo: 'qwwerwer'
      }
    )
    console.log(res)
    console.log('==== 同步请求 end =====')
  } catch (e) {
    console.log(e)
  }
}
</script>
</head>
<body>
  <button onclick="promisePost()">promisePost提交</button>
  <button onclick="asyncPost()">asyncPost提交</button>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Promise的含义 Promise在JavaScript语言中早有实现,ES6将其写进了语言标准,统一了用法...
    Alex灌汤猫阅读 851评论 0 2
  • title: promise总结 总结在前 前言 下文类似 Promise#then、Promise#resolv...
    JyLie阅读 12,352评论 1 21
  • 抽象来说,deferreds 可以理解为表示需要长时间才能完成的耗时操作的一种方式,相比于阻塞式函数它们是异步的,...
    北方蜘蛛阅读 1,582评论 1 5
  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,749评论 1 56
  • 《在工作生活中修行》之【随缘非随便】 行者:普我(朱格麟)2016年2月21日 在工作生活中修行,我们通常会说一切...
    普我阅读 179评论 0 0