promise用法

接口调用方式

我们都知道一般我们前台获取的数据都是从后台获取的,我们一般采用下面几种方式调取后台接口数据:

  1. 原生js的AJAX
  2. jquery封装的AJAX(偏向于操作DOM,不适用于vue)
  3. fetch
  4. axios

promise

创建后端接口

我们先用node创建本地服务,代码如下:

  • npm init -y
  • npm install express@4.17.1
  • npm install cors
const express = require("express");
const app = express();
const cors = require("cors");
app.use(cors());

app.get("/list", (req, res) => {
  res.send("展示数据列表信息");
});
app.get("/add", (req, res) => {
  res.send("添加列表内容");
});
app.get("/del", (req, res) => {
  res.send("删除列表内容");
});

app.listen("3000", () => {
  console.log("服务启动了 http://127.0.0.1:3000");
});

前端请求接口

<body>
    <script src="jquery-3.6.0 .js"></script>
    <script>
      // 获取列表信息
      $.ajax({
        url: "http:127.0.0.1:3000/list",
        type: "get",
        data: {},
        success: function(res) {
          console.log(res);
          // 实现添加功能
          $.ajax({
            url: "http:127.0.0.1:3000/add",
            type: "get",
            data: {},
            success: function(res) {
              console.log(res);
              // 实现删除功能
              $.ajax({
                url: "http:127.0.0.1:3000/del",
                type: "get",
                data: {},
                success: function(res) {
                  console.log(res);
                }
              });
            }
          });
        }
      });
    </script>
  </body>

promise基本用法

<script>
      var p = new Promise(function(resolve, reject) {
        resolve(); //成功时候调用的函数
        reject(); //失败时候调用的函数
      });
      p.then(
        function(res) {
          从resolve处理函数得到的结果;
        },
        function(res) {
          从reject处理函数得到的结果;
        }
      );
    </script>

说明

  1. 如果异步处理函数中运行成功会自动调用resolve函数,如果运行失败会自动调用reject函数。
  2. 不管正确还是错误的处理结果都会在then方法中捕获到

promise常用API

promise实例常用方法:

  • then是捕获上面运行正常的结果
  • catch是捕获上面运行失败的结果
  • finally是捕获不管运行成功还是失败都会执行的结果

promise对象常用方法:

Promise.all()处理多个异步并发任务,所有的任务都执行完毕才能获取结果
Promise.race()处理多个异步并发任务,只要有一个任务完成就能获取结果

fetch

fetch也是一种新的请求后台接口的方式,语法如下:

fetch(url)
    .then(fn1)
    .then(fn2)
    .catch(fn3)
    ....

代码示例:

<script>
      fetch("http://127.0.0.1:3000/list")
        .then(function(data) {
          return data.text();
        })
        .then(function(data) {
          console.log(data);
        });
    </script>

axios

简介:

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

特性

  1. 从浏览器中创建 XMLHttpRequests
  2. 从 node.js 创建 http 请求
  3. 支持 Promise API
  4. 拦截请求和响应
  5. 自动转换 JSON 数据

基本语法

npm install axios

axios.get('/list').then(res=>{
    res是后台响应的对象,res.data是获取后台返回的具体数据
)

axios基本API

axios中封装的有下面几个方法:

  1. get 查询
  2. post 添加
  3. delete 删除
  4. put 更新

get和delete请求

(1)问号传参

get和delete传参方式类似,我们以get请求为例演示:

比如前端发送数据如下:

 <script>
      axios.get("http://127.0.0.1:3000/list?id=1").then(function(res) {
        console.log(res.data);
      });
    </script>

后端app.js接受传参如下:

app.get("/list", (req, res) => {
  res.send("获取博客信息列表" + req.query.id);
});

(2)动态传参

前端代码如下:

<script>
      axios.get("http://127.0.0.1:3000/list/1").then(function(res) {
        console.log(res.data);
      });
    </script>

后端接口数据如下:

app.get("/list/:id", (req, res) => {
  res.send("获取博客信息列表" + req.params.id);
});

(3)params传参

前端传参如下:

<script>
      axios
        .get("http://127.0.0.1:3000/list", {
          params: {
            id: 1,
            name: "tom"
          }
        })
        .then(function(res) {
          console.log(res.data);
        });
    </script>

后端接收如下:

app.get("/list", (req, res) => {
  res.send("获取博客信息列表" + req.query.id + req.query.name);
});

post和put请求

前端传参:

<script>
      axios
        .post("http://127.0.0.1:3000/add", {
          username: "tom",
          pass: "111"
        })
        .then(function(res) {
          console.log(res.data);
        });
    </script>

后端接口获取数据(注意配置才能获取post请求的数据)

app.use(express.json());//后端配置获取post传递的json格式数据
app.post("/add", (req, res) => {
  res.send("实现添加功能" + req.body.username + req.body.pass);
});

或者前端传递参数如下:

<script>
      let params = new URLSearchParams();
      params.append("username", "tom"); //参数1是设置传递的变量名 参数2是传递的值
      params.append("pass", "111"); //参数1是设置传递的变量名 参数2是传递的值
      axios.post("http://127.0.0.1:3000/add", params).then(function(res) {
        console.log(res.data);
      });
    </script>

后端接口如下:

app.use(express.urlencoded({ extended: false }));//解析后传递格式是

app.post("/add", (req, res) => {
  res.send("实现添加功能" + req.body.username + req.body.pass);
});

put请求类似比如要id为2的这条信息更新为username为jim,age=20,所以前端的请求代码如下:

 <script>
      axios
        .put("http://127.0.0.1:3000/edite/2", {
          username: "jim",
          age: 20
        })
        .then(function(res) {
          console.log(res.data);
        });
    </script>

后端代码如下:

app.use(express.json());
app.put("/edite/:id", (req, res) => {
  res.send("实现更新功能" + req.body.username + req.body.age);
});

注意

我们上面的前端请求的接口地址每次都有一个前缀http://127.0.0.1:3000,为了更方便的进行代码管理,我们可以通过axios提供的一个方法设置访问的地址前缀:
比如上面的前端代码,我们如下操作会更加简洁

 <script>
      axios.defaults.baseURL = "http://127.0.0.1:3000/";
      axios
        .put("edite/2", {
          username: "jim",
          age: 20
        })
        .then(function(res) {
          console.log(res.data);
        });
    </script>

async和await

async和await是es7引入的新语法,更加方便异步编程的调用
async用在函数前面,async函数的返回值prommise的实例对象
await关键字用于async函数中,主要是获取异步代码执行的结果。

原代码示例如下:

<script>
      axios.defaults.baseURL = "http://127.0.0.1:3000/";
      axios.get("list").then(function(res) {
        console.log(res.data);
      });
</script>

用async和await改造如下:

      axios.defaults.baseURL = "http://127.0.0.1:3000/";
      async function queryData() {
        const res = await axios.get("list");
        console.log(res);
      }
      queryData();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值