8、同步与异步(回调、Promise、async函数)

简介: 8、同步与异步(回调、Promise、async函数)

1、同步


  • 一条一条数据按顺序执行


2、异步


  • 前一条数据不影响后一条数据执行


3、前端中常见的两种异步情况


类型
1、ajax 向后台请求数据
2、计时器 setInterval、setTimeout


4、获取异步的方法(回调函数)-回调地狱


  • 回调地狱:为了解决异步问题,不断嵌套回调函数,非常难维护
    function getTea(fn) {
      setTimeout(() => {
        fn("奶茶");
      }, 2000)
    }
    function getHotPot(fn) {
      setTimeout(() => {
        fn("火锅");
      }, 1000)
    }
    // 回调地狱:为了解决异步问题,不断嵌套回调函数,非常难维护
    getTea(function (data) {
      console.log(data);
      getHotPot(function (data) {
        console.log(data);
      });
    });
    // 输出结果:奶茶,火锅

5、获取异步的方法(Promise

  <script>
    let tea = new Promise((resolve, reject) => {
      setTimeout(() => {
        let flag = true;
        if (flag) {
          resolve("奶茶");
        } else {
          reject("获取奶茶失败");
        }
      }, 2000)
    })
    let hotPot = new Promise((resolve, reject) => {
      setTimeout(() => {
        let flag = true;
        if (flag) {
          resolve("火锅");
        } else {
          reject("获取火锅失败");
        }
      }, 1000)
    })
    // 按次序获取异步数据
    tea.then((data) => {
      console.log(data);
      return hotPot;
    }).then((data) => {
      console.log(data);
    }).catch((err) => {
      console.log(err);
    })
  </script>


6、获取异步的方法(async函数)


<script>
    let tea = new Promise((resolve, reject) => {
      setTimeout(() => {
        let flag = true;
        if (flag) {
          resolve("奶茶");
        } else {
          reject("获取奶茶失败");
        }
      }, 2000)
    })
    let hotPot = new Promise((resolve, reject) => {
      setTimeout(() => {
        let flag = true;
        if (flag) {
          resolve("火锅");
        } else {
          reject("获取火锅失败");
        }
      }, 1000)
    })
    // async函数(语法糖),跟同步非常类似
    async function fun() {
      let dataTea = await tea;
      console.log(dataTea);
      let dataHotPot = await hotPot;
      console.log(dataHotPot);
    }
    fun();
  </script>


相关文章
|
1月前
|
JSON 前端开发 JavaScript
【JavaScript技术专栏】JavaScript异步编程:Promise、async/await解析
【4月更文挑战第30天】JavaScript中的异步编程通过Promise和async/await来解决回调地狱问题。Promise代表可能完成或拒绝的异步操作,有pending、fulfilled和rejected三种状态。它支持链式调用和Promise.all()、Promise.race()等方法。async/await是ES8引入的语法糖,允许异步代码以同步风格编写,提高可读性和可维护性。两者结合使用能更高效地处理非阻塞操作。
|
1天前
|
前端开发 JavaScript
Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。
【6月更文挑战第27天】Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。它避免了回调地狱,通过链式调用`.then()`和`.catch()`使异步流程清晰。
7 2
|
3天前
|
存储 前端开发 JavaScript
中间件回调和Promise
【6月更文挑战第18天】
6 1
|
6天前
|
前端开发 JavaScript
JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。
【6月更文挑战第22天】JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。回调是基础,用于在操作完成后执行函数;Promise管理异步状态,支持链式调用;async/await提供同步代码外观,简化错误处理。每种技术在处理耗时任务时都起着关键作用。
13 3
|
12天前
|
前端开发 JavaScript 开发者
JavaScript中的异步编程:Promise与Async/Await
在现代前端开发中,JavaScript的异步编程变得越来越重要。本文将深入探讨JavaScript中的两种常见异步编程方式:Promise和Async/Await,并比较它们之间的优劣势,帮助读者更好地理解和运用这些技术。
|
16天前
|
JSON 前端开发 JavaScript
ES6引入Promise和async/await解决异步问题
【6月更文挑战第12天】ES6引入Promise和async/await解决异步问题。Promise处理异步操作,有pending、fulfilled、rejected三种状态,支持链式调用和并行处理。async/await是基于Promise的语法糖,使异步代码更同步化,提高可读性。两者都是处理回调地狱的有效工具,开发者应根据需求选择合适的方式。
38 3
|
10天前
|
分布式计算 前端开发 JavaScript
【JavaScript】Promise与Async/Await:异步编程的艺术
【JavaScript】Promise与Async/Await:异步编程的艺术
14 0
|
28天前
|
前端开发
Promise 和 Async/await 在实际开发中的应用场景
Promise 和 Async/await 在实际开发中的应用场景
|
1月前
|
前端开发
Promise和async/await之间有什么区别
Promise与async/await是异步编程的两种模式。Promise使用.then()和.catch()处理回调,语法较复杂,易出现回调地狱;而async/await提供更清晰的顺序代码,使用try/catch进行错误处理,使异步操作更易读、易维护。Promise在控制流和错误堆栈方面较为灵活,但定位错误难,而async/await自动等待、线性控制流,错误堆栈清晰。两者各有优势,选择取决于具体需求和偏好。
|
1月前
|
前端开发 JavaScript
掌握 Promise.all:优雅处理多个异步操作
掌握 Promise.all:优雅处理多个异步操作