Promise async/await
这篇文章开始前,我们先讲讲什么是回调地狱:
存在异步任务的代码,不能保证能按照顺序执行,如果非要代码顺序执行,可能出现回调函数套回调函数,这会让代码可读性差,不好维护。
回调函数
当一个函数作为参数传入另一个参数中,并且它不会立即执行,只有当满足一定条件后该函数才可以执行,这种函数就称为回调函数。定时器和Ajax中就存在回调函数。
回调函数: function(){console.log('执行了回调函数')}
1 | setTimeout(function(){ |
回调函数: xhr.onreadystatechange绑定的函数。
1 | //1.创建异步对象 |
异步任务
同步任务在主线程上排队执行,只有前一个任务执行完毕,才能执行下一个任务。
异步任务不进入主线程,而是进入异步队列,前一个任务是否执行完毕不影响下一个任务的执行。
1 | setTimeout(function(){ |
Promise
介绍
Promise 是 异步编程 的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大。
1 | const promise = new Promise(function(resolve, reject){ |
Promise Ajax实操
1 | const getJSON = function (url) { // 添加url参数 |
async/await
async
async 是一个通过异步执行并隐式返回 Promise 作为结果的函数。
async 函数返回的是一个 promise 对象,并且Promise还有state和result。
如果 async函数中有返回值,当调用该函数时,内部会调用Promise.resolve()方法把它转化成一个promise对象作为返回。
想获取到 async 函数的执行结果,就要调用 promise 的 then 或 catch 来给它注册回调函数
1 | async function timeout() { |
1 | async function timeout() { |
await
await关键字只能放到async函数内部。await不仅仅用于等Promise对象,还可以等任意表达式,await后面可以接普通函数调用或者直接量的,不过更多是放一个返回promise对象的表达式。等待promise对象执行完毕,并返回结果。await等待到Promise对象,会阻塞后面代码,等待并获得resolvereject的值。await等待到 非Promise对象,会自动将该对象包装成一个已经resolve的Promise对象。
1 | function getFirst() { |
1 | function log(time) { |
- Title: Promise async/await
- Author: waffle
- Created at : 2024-10-02 00:00:00
- Updated at : 2025-03-26 09:25:39
- Link: https://blog.waffle.icu/2024/10/02/Promise对象/
- License: This work is licensed under CC BY-NC-SA 4.0.