Vue基础day04--接口调用方式

接口调用方式

  • 原生ajax
  • 基于jQuery的ajax
  • fetch
  • axios

同步和异步

  • JavaScript的执行环境是「单线程」

  • 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的线程只有一个,也就是一次只能完成一项任务,这个任务执行完后才能执行下一个,它会「阻塞」其他任务。这个任务可称为主线程
    什么是同步?什么是异步?
    同步:代码从上往下执行,遇到同步,就会一直等,等到完成,才会继续走
    异步:代码从上往下执行,遇到异步,就先走了,异步代码后面执行

  • JS中常见的异步调用

    • 定时器
    • ajax
    • 事件函数

promise

promise是异步编程的一种解决方案(可以解决回调地狱)
promise对象提供简洁的API,使得异步操作更加容易

<script type="text/javascript">
    /*
     1. Promise基本使用
           我们使用new来构建一个Promise  Promise的构造函数接收一个参数,是函数,并且传入两个参数:		   resolve,reject, 分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数
    */


    var p = new Promise(function(resolve, reject){
   
      //2. 这里用于实现异步任务  setTimeout
      setTimeout(function(){
   
        var flag = false;
        if(flag) {
   
          //3. 正常情况
          resolve('hello');
        }else{
   
          //4. 异常情况
          reject('出错了');
        }
      }, 100);
    });
    //  5 Promise实例生成以后,可以用then方法指定resolved状态和reject状态的回调函数 
    //  在then方法中,你也可以直接return数据而不是Promise对象,在后面的then中就可以接收到数据了  
    p.then(function(data){
   
      console.log(data)
    },function(info){
   
      console.log(info)
    });
  </script>

基于Promise发送Ajax请求

 
  <script type="text/javascript">
    /*
      基于Promise发送Ajax请求
    */
    function queryData(url) {
   
     #   1.1 创建一个Promise实例
      var p = new Promise(function(resolve, reject){
   
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(){
   
          if(xhr.readyState != 4) return;
          if(xhr.readyState == 4 && xhr.status == 200) {
   
            # 1.2 处理正常的情况
            resolve(xhr.responseText);
          }else{
   
            # 1.3 处理异常情况
            reject('服务器错误');
          }
        };
        xhr.open('get', url);
        xhr.send(null);
      });
      return p;
    }
	# 注意:  这里需要开启一个服务 
    # 在then方法中,你也可以直接return数据而不是Promise对象,在后面的then中就可以接收到数据了
    queryData('http://localhost:3000/data')
      .then(function(data){
   
        console.log(data)
        #  1.4 想要继续链式编程下去 需要 return  
        return queryData('http://localhost:3000/data1');
      })
      .then(function(data){
   
        console.log(data);
        return queryData('http://localhost:3000/data2');
      })
      .then(function(data){
   
        console.log(data)
      });
  </script>

Promise 基本API

实例方法

.then()

  • 得到异步任务正确的结果

.catch()

  • 获取异常信息

.finally()

  • 成功与否都会执行(不是正式标准)
 <script type="text/javascript">
    /*
      Promise常用API-实例方法
    */
    // console.dir(Promise);
    function foo() {
   
      return new Promise(function(resolve, reject){
   
        setTimeout(function(){
   
          // resolve(123);
          reject('error')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值