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>


相关文章
|
7天前
|
前端开发 JavaScript
JavaScript——promise 是解决异步问题的方法嘛
JavaScript——promise 是解决异步问题的方法嘛
14 0
|
8天前
|
前端开发 JavaScript 开发者
探索前端开发中的异步编程:Promise与Async/Await
在现代前端开发中,处理异步操作是至关重要的。本文将深入探讨异步编程的核心概念,重点比较JavaScript中的Promise与Async/Await两种异步编程方式。通过实例和比较,读者将能够理解这两种方法的优缺点,如何在实际开发中选择适合的异步编程模式,从而编写更简洁、可维护的代码。
|
26天前
|
前端开发 安全
协程问题之协程函数返回的Promise对象必须满足哪些要求
协程问题之协程函数返回的Promise对象必须满足哪些要求
|
21天前
|
前端开发 JavaScript
Vue 中 Promise 的then方法异步使用及async/await 异步使用总结
Vue 中 Promise 的then方法异步使用及async/await 异步使用总结
28 1
|
16天前
|
前端开发 JavaScript
ES6新特性(五):Promise优雅地处理异步
ES6新特性(五):Promise优雅地处理异步
|
1月前
|
前端开发 JavaScript
JavaScript异步编程:Promise与async/await的深入探索
【7月更文挑战第9天】Promise和async/await是JavaScript中处理异步编程的两大利器。Promise为异步操作提供了统一的接口和链式调用的能力,而async/await则在此基础上进一步简化了异步代码的书写和阅读。掌握它们,将使我们能够更加高效地编写出清晰、健壮的异步JavaScript代码。
|
1月前
|
前端开发 小程序 API
【微信小程序】使用 Promise、async 和 await 将异步API 改写为同步
【微信小程序】使用 Promise、async 和 await 将异步API 改写为同步
29 0
|
3月前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
36 1
|
3月前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
59 4
|
3月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。