zoukankan      html  css  js  c++  java
  • 详解Promise的 用法(含ES7)

    一、Promise 的基本语法

     1 <script>
     2         // 基本语法
     3         new Promise((resolve, reject) => {
     4             // resolve reject本身也是函数 ,如果我们是一个成功的操作(异步操作) 就调用 resolve, 
     5             // 否则就是一个失败的操作(异步操作) 就调用reject
     6             if (true) {
     7                 resolve("成功的数据")
     8             } else {
     9                 reject("失败的数据")
    10             }
    11         }).then(res => {
    12             console.log(res)
    13         }).catch(err => {
    14             console.log(err)
    15         })
    16 
    17 
    18     </script>

    二、实际应用,通过promise解决回调地狱

     1  <script>
     2 
     3         // 回调地狱
     4         // $.get('http://127.0.0.1:5000/api/getid', function (data) {
     5         //     var id = data.id;
     6         //     $.get('http://127.0.0.1:5000/api/getcode?id=' + id, function (data) {
     7         //         let pwd = data.pwd;
     8         //         $.get('http://127.0.0.1:5000/api/getmsg?pwd=' + pwd, function (data) {
     9         //             if (data.code === 200) {
    10         //                 console.log(data.msg)
    11         //             }
    12         //         })
    13         //     })
    14         // })
    15 
    16         new Promise((resove, reject) => {
    17             $.get('http://127.0.0.1:5000/api/getid', function (data) {
    18                 resove(data.id)
    19             })
    20         })
    21             .then(id => {
    22                 return new Promise((resolve, reject) => {
    23                     $.get('http://127.0.0.1:5000/api/getcode?id=' + id, function (data) {
    24                         resolve(data.pwd)
    25                     })
    26                 })
    27             })
    28             .then(pwd => {
    29                 return new Promise((resolve, reject) => {
    30                     $.get('http://127.0.0.1:5000/api/getmsg?pwd=' + pwd, function (data) {
    31                         resolve(data.msg)
    32                     })
    33                 })
    34             })
    35             .then(msg => {
    36                 console.log(msg)
    37             })
    38 
    39     </script>

    三、用ES7语法优化

     1 <template>
     2   <div>
     3     <h1>axios的基本使用</h1>
     4     <button @click="sendGet">发送get请求</button>
     5     <button @click="sendPost">发送post请求</button>
     6     <button @click="submitForm">登录</button>
     7   </div>
     8 </template>
     9 
    10 <script>
    11 // 引入axios
    12 import axios from "axios";
    13 // 引入qs
    14 import qs from "qs";
    15 
    16 // 引入调用接口的函数
    17 import { checkLogin } from "@/api/login";
    18 
    19 export default {
    20   created() {},
    21   methods: {
    22     sendGet() {
    23       // 发送get请求方式1
    24       //   axios
    25       //     .get("http://127.0.0.1:5000/api/register", {
    26       //       params: {
    27       //         acc: "admin",
    28       //         pwd: "123456"
    29       //       }
    30       //     })
    31       //     .then(res => {
    32       //       console.log(res.data);
    33       //     })
    34       //     .catch(err => {
    35       //       console.log(err);
    36       //     });
    37       // 发送get请求方式2
    38       //   axios
    39       //     .get("http://127.0.0.1:5000/api/register?acc=admin&pwd=123456")
    40       //     .then(res => {
    41       //       console.log(res.data);
    42       //     })
    43       //     .catch(err => {
    44       //       console.log(err);
    45       //     });
    46     },
    47     sendPost() {
    48       // 发送post请求
    49       // let params = {
    50       //   acc: "admin",
    51       //   pwd: "123"
    52       // };
    53       // axios
    54       //   .post("http://127.0.0.1:5000/api/login", qs.stringify(params))
    55       //   .then(res => {
    56       //     console.log(res.data);
    57       //   })
    58       //   .catch(err => {
    59       //     console.log(err);
    60       //   });
    61     },
    62     async submitForm() {
    63       // 登录请求
    64       // pomise写法
    65       // checkLogin({ acc: "admin", pwd: "123" })
    66       //   .then(({ code, msg }) => {
    67       //     console.log(code);
    68       //     console.log(msg);
    69       //   })
    70       //   .catch(err => {
    71       //     console.log(err);
    72       //   });
    73       let { code, msg } = await checkLogin({ acc: "admin", pwd: "123" }); // 如果不是接promise
    74       console.log(code, msg);
    75     }
    76   }
    77 };
    78 </script>
    79 
    80 <style lang="scss" scoped>
    81 </style>
  • 相关阅读:
    sipp如何避免dead call
    6174问题
    笨小熊
    scanf 与 cin 的区别
    谁获得了最高奖学金
    _int64、long long 的区别
    小光棍数
    简单排序法
    La=LaULb (循环链表)
    删除重复的数(顺序有序表)
  • 原文地址:https://www.cnblogs.com/le220/p/11772978.html
Copyright © 2011-2022 走看看