美文网首页
async 和 await

async 和 await

作者: 缘之空_bb11 | 来源:发表于2024-12-12 10:58 被阅读0次

参考学习地址

async 和 await 是简化异步编程的语法糖, 通过同步代码结构实现异步操作

  1. 定义 async 函数
    async 函数通过 async 关键字标记,返回一个 Promise 对象:
async function getData() {
  return "Hello World"; // 返回的值会被包装成 Promise.resolve("Hello World")
}
getData().then(result => console.log(result)); // 输出 "Hello World" :ml-citation{ref="4,8" data="citationList"}
  1. 使用 await 等待异步操作
    await 必须在 async 函数内部使用,用于等待 Promise 完成:
async function fetchData() {
  const response = await fetch('https://api.example.com/data'); // 等待网络请求完成
  const data = await response.json(); // 等待解析 JSON
  return data;
}
  1. 错误处理
    用 try...catch 捕获异步操作中的错误:
async function loadUser() {
  try {
    const response = await fetch('https://api.example.com/user');
    if (!response.ok) throw new Error('请求失败');
    return await response.json();
  } catch (error) {
    console.error('加载用户失败:', error);
    return null;
  }
}

此方式替代了传统 Promise 的 .catch() 链式调用。

  1. 顺序执行异步操作
    多个 await 按顺序执行,适用于有依赖关系的异步任务:
async function processOrder() {
  const user = await getUser(userId);    // 先获取用户信息
  const order = await getOrder(user.id); // 再根据用户 ID 获取订单
  return { user, order };
}

每一步等待上一步完成后执行

注意事项
1. 必须成对使用:await 必须在 async 函数内部。

  1. 返回值为 Promise:即使函数内返回非 Promise 值,也会被包装成 Promise。
  2. 避免阻塞:await 不会阻塞主线程,但会暂停当前 async 函数的执行,直到 Promise 完成.

🌰:

function test() {
    return new Promise(((resolve, reject) => {
        //假装是你的异步任务:
        const isSuccess = true
        if (isSuccess)
            resolve('异步任务2成功')
        else
            reject('异步任务2失败')
    }))
}

async function main() {
    //任务1,3,4是同步任务
    console.log('任务1')
    const data = await test();
    console.log(data)
    console.log('任务3')
}

// 调用 
main()
console.log("任务4")

打印:
任务 1
任务 4
任务2成功
任务 3

完整示例:用户登录流程

async function login(username, password) {
  try {
    // 1. 验证用户
    const user = await validateUser(username);
    // 2. 检查密码
    const isValid = await checkPassword(user.id, password);
    if (!isValid) throw new Error('密码错误');
    // 3. 获取权限
    const permissions = await fetchPermissions(user.id);
    return { user, permissions };
  } catch (error) {
    console.error('登录失败:', error);
    throw error; // 重新抛出错误供外部处理
  }
}

相关文章

  • async和await

    浅谈Async/Await用 async/await 来处理异步 async和await async:声明一个异步...

  • ES8(一) —— async&await

    目录 async和普通函数的区别 await async/await处理多回调异步 async和await必须配合...

  • ES6中的好东西

    1 Await/Async 前端的回调时代我没有赶上,我赶上的是await/async时代。await和async...

  • 使用 async 和 await,实现 fetch 同步请求

    使用 async 和 await,实现 fetch 同步请求 关于 async 和 await 的介绍https:...

  • ES2017 async 函数

    async 和 await 在干什么 每个名称都有意义async : 异步await: async wait简...

  • async-await

    一、async-await和Promise的关系 async-await是promise和generator的语法...

  • 小程序-云开发

    async和await async:异步(无等待)await:等待(是为了同步) 一、await 关键字只在 as...

  • async / await

    async / await 优缺点 async 和 await 相比直接使用 Promise 来说,优势在于处理 ...

  • flutter中compute和isolate

    async和await:对于普通的任务,使用async和await可实现异步处理任务,而async的处理方式并非使...

  • Promise 执行顺序

    使用 async 和 await

网友评论

      本文标题:async 和 await

      本文链接:https://www.haomeiwen.com/subject/mqqxejtx.html