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>


相关文章
|
23天前
|
前端开发 JavaScript
setTimeout、Promise、Async/Await 的区别
`setTimeout` 是用于延迟执行函数的简单方法;`Promise` 表示异步操作的最终完成或失败;`Async/Await` 是基于 Promise 的语法糖,使异步代码更易读和维护。三者都用于处理异步操作,但使用场景和语法有所不同。
|
22天前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:深入了解 Promise 和 async/await
【10月更文挑战第8天】JavaScript 中的异步编程:深入了解 Promise 和 async/await
|
19天前
|
前端开发 JavaScript UED
深入了解JavaScript异步编程:回调、Promise与async/await
【10月更文挑战第11天】深入了解JavaScript异步编程:回调、Promise与async/await
11 0
|
2月前
|
前端开发 JavaScript
解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
该文章教授了如何使用Promise和async/await来解决异步编程问题,从而避免回调地狱,使代码更加清晰和易于管理。
解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
|
3月前
|
前端开发
手写实现ES6的Promise.all()和Promise.race()函数
这篇文章介绍了如何手写实现ES6的`Promise.all()`和`Promise.race()`函数,提供了实现这两个Promise聚合函数的详细代码示例,并展示了如何使用它们。
手写实现ES6的Promise.all()和Promise.race()函数
|
6月前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
64 1
|
6月前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
91 4
|
6月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。
|
5月前
|
前端开发 JavaScript 开发者
JavaScript进阶-Promise与异步编程
【6月更文挑战第20天】JavaScript的Promise简化了异步操作,从ES6开始成为标准。Promise有三种状态:pending、fulfilled和rejected。基本用法涉及构造函数和`.then`处理结果,如: ```javascript new Promise((resolve, reject) =&gt; { setTimeout(resolve, 2000, &#39;成功&#39;); }).then(console.log); // 输出: 成功
85 4
|
6月前
|
JSON 前端开发 JavaScript
【JavaScript技术专栏】JavaScript异步编程:Promise、async/await解析
【4月更文挑战第30天】JavaScript中的异步编程通过Promise和async/await来解决回调地狱问题。Promise代表可能完成或拒绝的异步操作,有pending、fulfilled和rejected三种状态。它支持链式调用和Promise.all()、Promise.race()等方法。async/await是ES8引入的语法糖,允许异步代码以同步风格编写,提高可读性和可维护性。两者结合使用能更高效地处理非阻塞操作。
79 0