Promise——promise是什么?为什么要用promise?

Promise是什么?

  1. 抽象表达:
  • Promise是一门新的技术(ES6规范)
  • Promise是JS中进行异步编程的新的解决方案。
    (旧方案是单纯的使用回调函数)
    备注:异步编程包括fs文件操作,数据库操作,AJAX,定时器
  1. 具体表达:
  • 从语法上来说:Promise就是一个构造函数
  • 从功能上来说:Promise对象用来封装一个异步操作并可以获取其成功或者失败的和结果值。

为什么要用Promise?

指定回调函数的方式和更加灵活

  1. 旧的:必须在启动异步任务前指定
  2. promise:启动异步任务=>返回promise对象=>给promise对象绑定回调函数。(甚至可以在异步任务结束后指定多个)

支持链式调用,可以解决回调地狱的问题。

1. 什么是回调地狱?

回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调的执行的条件。
getData() {
    
    
  axios.get("./mock/data_a.json").then((res1) => {
    
    
    console.log(res1.data.code);
    axios.get("./mock/data_b.json").then((res2) => {
    
    
      console.log(res2.data.code);
      axios.get("./mock/data_c.json").then((res3) => {
    
    
        console.log(res3.data.code);
      });
    });
  });
},

2. 回调地狱的缺点?

(1) 嵌套过多会影响代码的可读性和逻辑
(2) 当某个请求失败时难以定位问题,这情况被称为回调地狱

3. 解决方案?

promise链式调用

methods:{
    
    
  getData1(url) {
    
    
    return new Promise((resolve, reject) => {
    
    
      axios.get(url).then((res1) => {
    
    
        if (res1.data.code <= 1) {
    
    
          resolve("成功");
        } else {
    
    
          reject("失败");
        }
      });
    });
  },
}


mounted(){
    
    
	this.getData1("./mock/data_a.json")
    .then((res) => {
    
    
      console.log(res);
      return this.getData1("./mock/data_b.json");
    })
    .then((res) => {
    
    
      console.log(res);
      return this.getData1("./mock/data_c.json");
    })
    .then((res) => {
    
    
      console.log(res);
    })
    .catch((err) => {
    
    
      console.log(err);
    });
}

猜你喜欢

转载自blog.csdn.net/weixin_52148548/article/details/126103653
今日推荐