当前位置:   article > 正文

ES6--Promise--promise-ajax应用,promise-ajax函数封装_es6中promise是对ajax封装的吗

es6中promise是对ajax封装的吗

1.promise

       Promise 是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。

实例化

       Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。

       它们是两个函数,由 JavaScript 引擎提供。

        Promise对象代表一个异步操作有三种状态: pending(进行中)、fulfilled(已成功)和rejected(已失败)。

        状态发生改变之后就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)

const promise = new Promise(function(resolve, reject) {
  // ... some code
  if (/* 异步操作成功 */){
    resolve(value);     // pending -> fulfilled
  } else {
    reject(error);     // pending -> rejected
  }
});

实例方法

      定义在Promise.prototype中的方法,通过Promise实例可以直接调用
Promise.prototype.then()
     当状态由pending变为fulfilled的时候执行该回调函数,
     参数:回调函数,回调函数的参数为resolve函数传递过来的值
     返回值:返回一个新的Promise实例对象,因此可以使用链式调用
Promise.prototype.catch()
     当状态由pending变为rejected的时候执行该回调函数
     参数:回调函数,回调函数的参数为reject函数传递过来的值
     返回值:返回一个新的Promise实例对象,因此可以使用链式调用
Promise.prototype.finally()
    当状态由pending变为fulfilled或者rejected的时候都执行该回调函数,
    参数:回调函数
    返回值:返回一个新的Promise实例对象

  1. const promise = new Promise(function (resolve, reject) {
  2. if (1 > 0) {
  3. resolve('success') // promise状态 pending => fulfilled
  4. } else {
  5. reject('error') // promise状态 pending => rejected
  6. }
  7. })
  8. // .then 后面跟上.catch 这种写法,叫链式调用
  9. // 都是promise来调用的
  10. // promise状态变为fulfilled时,执行.then
  11. // promise状态变为rejected时,执行.catch
  12. // resolve函数对应成功的回调 => .then()内部的回调
  13. // reject函数对应失败的回调 => .catch()函数内部的回调
  14. promise.then((res) => {
  15. // 成功的回调,拿到resolve('suceess')的传递过来的实参
  16. console.log(res);
  17. }).catch((error) => {
  18. // 失败的回调,拿到reject('error')的传递过来的实参
  19. console.log(error);
  20. })

 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>promise-ajax</title>
  8. <script src="./js/jquery.js"></script>
  9. <script>
  10. const baseURL = 'http://47.94.46.113:8888';
  11. const promise = new Promise((resolve, reject) => {
  12. // 异步请求
  13. $.ajax({
  14. url: baseURL + '/index/category/findAlll',
  15. method: 'get',
  16. success(res) {
  17. // 异步请求成功,将成功结果作为实参传递到resolve回调中去
  18. resolve(res);
  19. },
  20. error(error) {
  21. // 异步请求失败,将失败结果作为实参传递到reject回调中去
  22. reject(error);
  23. }
  24. })
  25. })
  26. // 监听promise实例状态的改变
  27. promise.then((res) => {
  28. console.table(res.data);
  29. }).catch((error) => {
  30. console.error(error);
  31. }).finally(() => {
  32. console.log('最终执行');
  33. })
  34. </script>
  35. </head>
  36. <body>
  37. </body>
  38. </html>
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>promise工厂函数</title>
  8. <script src="./js/jquery.js"></script>
  9. <script>
  10. const baseURL = 'http://47.94.46.113:8888';
  11. function getPeomise(url, method) {
  12. return new Promise((resolve, reject) => {
  13. $.ajax({
  14. url: baseURL + url,
  15. method,
  16. success(res) {
  17. resolve(res);
  18. },
  19. error(error) {
  20. reject(error);
  21. }
  22. })
  23. })
  24. }
  25. let pro1 = getPeomise('/index/category/findAll', 'get');
  26. let pro2 = getPeomise('/index/article/findHotArticles', 'get');
  27. // 静态方法
  28. // let newPro = Promise.any([pro1, pro2]);
  29. // newPro.then(res => {
  30. // console.log(res);
  31. // }).catch(error => {
  32. // console.log(error);
  33. // })
  34. // 访问pro1这个promise实例内部的状态
  35. // pro1.then(res => {
  36. // console.table(res.data);
  37. // }).catch(error => {
  38. // console.error(error);
  39. // })
  40. // pro2.then(res => {
  41. // console.table(res.data);
  42. // }).catch(error => {
  43. // console.error(error);
  44. // })
  45. let obj = {
  46. name: '张三',
  47. age: 12
  48. }
  49. let proObj = Promise.reject(obj);
  50. console.log(proObj);
  51. </script>
  52. </head>
  53. <body>
  54. </body>
  55. </html>

静态方法

          定义在Promise中的方法,通过Promise可以直接调用
Promise.all([p1,p2])
    用于将多个 Promise 实例,包装成一个新的 Promise 实例,
    参数:数组,数组中的元素为Promise实例
    返回值:Promise实例,当p1,p2状态都为fulfilled时候,该实例的状态才为fulfilled,此时p1,p2的返回值组成一个数组,传递给该实例的回调函数;只要p1,p2的返回值有一个变为rejected,该实例状态为rejected
Promise.race([p1,p2])
     用于将多个 Promise 实例,包装成一个新的 Promise 实例,
    参数:数组,数组中的元素为Promise实例
    返回值:Promise实例,当p1,p2之中有一个实例率先改变状态,该实例的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给该实例的回调函数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/148119
推荐阅读
相关标签
  

闽ICP备14008679号