首页 > 编程语言 >【五】Ajax与异步编程之异步编程

【五】Ajax与异步编程之异步编程

时间:2023-07-16 15:55:44浏览次数:34  
标签:异步 console log 编程 Ajax Promise response

【五】Ajax与异步编程之异步编程

【1】异步编程

  • js默认是单线程运行的,这意味着两段代码不能同时运行,所以在同步代码执行过程中,代码是逐行地运行的。

  • 简单来理解就是:

    • 同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。
  • 关于在javascript中异步编程的方式

    • 常用的无非就是定时器、ajax、Promise、Generator、async/await、服务器推技术。
  • 服务器推技术:

    • WebSocket,Worker,EventSource三大技术。

【2】Promise

  • Promise 是ES6推出异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
    • 它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
  • Promise 对象是一个代理对象(代理一个值),被代理的值在 Promise 对象创建时可能是未知的。
    • 它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。
    • 这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的 promise 对象。

Promise的三种状态

  • pending:

    • 初始状态,既不是成功,也不是失败状态;
  • fulfilled:

    • 意味着操作成功完成;
  • rejected:

    • 意味着操作失败。

Promise 对象只有两种状态的变化可能性:

​ pending变为fulfilled状态

​ pending变为rejected状态。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
    var status = false;
    var response = new Promise((resolve, reject)=>{
      // 下载/读取文件等耗时操作,容易阻塞的代码
      // ....
      if(status === false){
        // 写耗时的代码,结果放在resolve作为参数提供给调用者
        resolve("成功的结果");
      }else{
        reject("错误了!!!你玩大了!");
      }
    });
    console.log("1")
    response.then(response=>{
        console.log(response);
    }).catch(error=>{
        console.log(error)
    })
    console.log("2")
    </script>
</body>
</html>

【3】Generator

生成器

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<script>
    // 生成器函数
    function* gen(){
        // yield 暂停
        yield 100
        yield 200
        yield 300
        yield 400
        return 500
    }
    // 生成器函数的返回值就是生成器对象
    let g = gen()
    console.log(g)
    console.log(g.next())
    console.log(g.next())
    console.log(g.next())
    console.log(g.next())
    console.log(g.next()) // 可以获取retrun返回值

    // for循环无法获取生成器的return返回值,仅能回去yield的返回值
    for(let item of gen()){
        console.log(item)
    }

</script>
</body>
</html>

【4】async/await

  • async/await 可以实现协程的简化
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // async 标记当前函数为异步
    async function request() {
        try {
            // await 等待
            const data1 = await fetch("http://127.0.0.1:8080",{mode:"cors"}).then(response=>response.json());
            const data2 = await fetch("http://127.0.0.1:8080",{mode:"cors"}).then(response=>response.json());
            console.log(data1);
            console.log(data2);
        } catch (e) {
            console.log('出错啦');
        }
    }
    request()
    console.log("hello!!")
</script>
</body>
</html>

【5】小结

  • 大部分公司:
    • 前端开发的技术:vue/react/angular + 打包工具 + web服务器软件 + 压缩工具
  • 一部分公司:
    • ts+vue/react/angular + 打包工具 + web服务器软件 + 压缩工具
  • 少部分公司:
    • jquery/bootstap + 打包工具 + web服务器软件 + 压缩工具

标签:异步,console,log,编程,Ajax,Promise,response
From: https://www.cnblogs.com/dream-ze/p/17557955.html

相关文章

  • 【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案
    【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案【1】同源策略同源策略(ameoriginpolicy),是浏览器为了保护用户信息在服务端的安全的而设置一种安全机制。所谓的同源就是指代通信的两个地址(例如服务端接口地址与浏览器客户端页面地址)之间比较,是否协议、域名(IP)和......
  • 数学不好的人适合学编程
    数学不好的人适合学编程 白日梦无知​关注 57人赞同了该文章说起数学,说多了都是泪。从小到大,数学都差。混到高中,还是漏中。高二时,听数学老师说,学习计算机,数学很重要。我很是激动。虽然我想学好,但是不知道为什么总是学不好。最后阴差阳错,竟然上大学不是......
  • 后端编程开发 --- 学习路线
    1.选择一门后端语言。比如脚本语言,python、ruby、php、nodejs(typescript)。函数语言,elixir、scala、erlang、clojure、haskell。其他语言,java,.net,golang,rust。新人推荐nodejs或php。2.写一些入门程序。比如爬虫,json解析,自动化任务。3.学习依赖包管理和项目创建。比如java的maven,p......
  • 网络编程 p1 网络基础
    网络基础网络通信概念:两台设备之间通过网络实现数据传输;网络通信:将数据通过网络从一台设备传输到另一台设备;java.net包下提供了一系列的类或接口,供程序员使用,完成网络通信;网络概念:两台或多台设备通过一定物理设备连接起来构成了网络;根据网络的覆盖范围不同,对网络进行分......
  • 为什么unity里的异步加载要配合协程使用
      在Unity中,异步加载资源时需要配合协程使用的原因是为了避免阻塞主线程。在游戏开发中,资源加载通常是一个耗时的操作,如果在主线程中进行同步加载,会导致游戏卡顿或者无响应,影响用户体验。使用协程可以将资源加载操作放在后台线程中进行,然后在加载完成后再将结果返回到主线程......
  • 《架构整洁之道》学习笔记 Part 2 编程范式
    计算机编程发展至今,一共只有三个编程范式:结构化编程面向对象编程函数式编程编程范式和软件架构的关系结构化编程是各个模块的算法实现基础多态(面向对象编程)是跨越架构边界的手段函数式编程是规范和限制数据存放位置与访问权限的手段软件架构的三大关注重点:功能性、组......
  • Python 并发编程之IO模型(转载)
    Python并发编程之IO模型https://www.cnblogs.com/linhaifeng/articles/7454717.htmlIO模型介绍为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞同步(synchronous)IO和异步(asynchronous)IO,阻塞(blocking)IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别......
  • 【雕爷学编程】Arduino动手做(02)---光敏电阻模块3
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(02)---光敏电阻模块2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块4
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......