当前位置: 首页 > news >正文

Promise使用

Promise 是 JavaScript 中用于处理异步操作的一种对象,它代表了一个异步操作的最终完成(或失败)及其结果值。Promise 有三种状态:
1.  pending(进行中):初始状态,既不是成功也不是失败。
2.  fulfilled(已成功):操作成功完成。
3.  rejected(已失败):操作失败。
基本使用
Promise 通常用于处理异步操作,比如网络请求、文件读取等。以下是 Promise 的基本使用方法:
1. 创建一个 Promise
const myPromise = new Promise((resolve, reject) => {
  // 异步操作
  setTimeout(() => {
    const success = true; // 假设异步操作成功
    if (success) {
      resolve("操作成功!"); // 成功时调用 resolve
    } else {
      reject("操作失败!"); // 失败时调用 reject
    }
  }, 1000);
});

2. 使用 then 和 catch 处理 Promise
myPromise
  .then((result) => {
    console.log(result); // 输出:操作成功!
  })
  .catch((error) => {
    console.error(error); // 如果 reject,这里会捕获错误
  });

链式调用
Promise 支持链式调用,可以将多个异步操作按顺序执行:
Promise.resolve("第一步")
  .then((result) => {
    console.log(result); // 输出:第一步
    return "第二步"; // 返回值会被下一个 then 接收
  })
  .then((result) => {
    console.log(result); // 输出:第二步
    return "第三步";
  })
  .then((result) => {
    console.log(result); // 输出:第三步
  })
  .catch((error) => {
    console.error(error);
  });

Promise.all
Promise.all 用于并行执行多个 Promise,并等待所有 Promise 完成:
const promise1 = Promise.resolve("第一个 Promise");
const promise2 = new Promise((resolve) => setTimeout(() => resolve("第二个 Promise"), 1000));
const promise3 = Promise.reject("第三个 Promise");

Promise.all([promise1, promise2, promise3])
  .then((results) => {
    console.log(results); // 如果所有 Promise 都成功,输出:["第一个 Promise", "第二个 Promise", "第三个 Promise"]
  })
  .catch((error) => {
    console.error(error); // 如果任何一个 Promise 失败,这里会捕获错误
  });

Promise.race
Promise.race 用于并行执行多个 Promise,但只要其中一个 Promise 完成(无论成功还是失败),就会立即返回结果:
const promise1 = new Promise((resolve) => setTimeout(() => resolve("第一个 Promise"), 1000));
const promise2 = new Promise((resolve) => setTimeout(() => resolve("第二个 Promise"), 500));

Promise.race([promise1, promise2])
  .then((result) => {
    console.log(result); // 输出:第二个 Promise(因为它的执行时间更短)
  })
  .catch((error) => {
    console.error(error);
  });

错误处理
Promise 的错误处理通常使用 .catch() 方法:
const myPromise = new Promise((resolve, reject) => {
  reject("出错了!");
});

myPromise
  .then((result) => console.log(result))
  .catch((error) => console.error(error)); // 输出:出错了!

实际应用场景
1.  网络请求:
fetch("https://api.example.com/data")
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

2.  文件读取:
const fs = require("fs").promises;

fs.readFile("file.txt", "utf8")
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

总结
Promise 是处理异步操作的重要工具,它提供了比回调函数更清晰的代码结构。通过 then、catch、Promise.all 和 Promise.race 等方法,可以灵活地处理异步任务。现代 JavaScript 中,async/await 语法也是基于 Promise 的,进一步简化了异步代码的书写。

http://www.dtcms.com/a/98764.html

相关文章:

  • 【题解】AtCoder At_abc399_d [ABC399D] Switch Seats
  • .NET开发基础知识21-30
  • [GXYCTF2019]禁止套娃1 [GitHack] [无参数RCE]
  • Matplotlib基本使用
  • 数据库监控 | openGauss监控解析
  • 小程序API —— 56页面处理函数 - 下拉刷新
  • 前端常问的宏观“大”问题详解(二)
  • 编译原理课设工作日志
  • 一些练习 C 语言的小游戏
  • 探索Scala基础:融合函数式与面向对象编程的强大语言
  • 在 Unreal Engine 5 中制作类似《鬼泣5》这样的游戏时,角色在空中无法落地的问题可能由多种原因引起。
  • C++作用域辨识详解
  • 高等数学-第七版-上册 选做记录 习题7-4
  • linux基本命令(1)--linux下的打包命令 -- tar 和gzip
  • 电子电气架构 --- 域控架构下,汽车连接器的挑战和变化
  • Ethernet/IP转Modbus剖析库卡机器人同S7-1200PLC双向通讯的技术
  • OpenAI API - Realtime 实时
  • 高速电路中的存储器应用与设计四
  • 【JavaScript】合体期功法——DOM(一)
  • Python 序列构成的数组(元组不仅仅是不可变的列表)
  • 质因数个数--欧拉函数中统计纯素数
  • 直播推流全面指南
  • 【设计模式】单例模式
  • 安卓分发平台一站式APP应用内测平台
  • ros2--功能包
  • 如何备份你的 Postman 所有 Collection?
  • 0329-项目(添加 删除 修改)
  • Java内存中的Heap(堆)的作用
  • <背包问题>
  • Java多线程:(2)通过实现Runnable接口创建线程