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

构建一个简单的Promise

构建一个简单的Promise

我们以之前举例的彩票为例,构建一个Promise

  • 构建一个Promise的示例代码如下
//Promise构造函数中传入一个执行器函数,接受两个参数,一个是异步操作成功调用的的函数,一个是异步操作失败调用的函数
const lotteryPromise = new Promise(function (resolve, reject) {});
  • 这里我们简化一个,假设我们中奖的概率是50%,未中奖的概率是50%
const lotteryPromise = new Promise(function (resolve, reject) {
  if (Math.random() >= 0.5) {
    resolve('恭喜你中奖了💴'); //这里记住,不管如何,这里始终是我们成功调用要传入的东西
  } else {
    reject('感谢你对公益做出的贡献☺');//同上,这里始终是我们调用失败要传入的东西
  }
});

  • 接下来,我们就使用这个Promise
lotteryPromise.then(res => console.log(res).catch(err => console.error(err)));

在这里插入图片描述

当然,我们这里是是一个随机数,多刷新几次也就会成功

在这里插入图片描述

  • 当然,上面并不算是一个异步,我们可以通过定时器的异步方式来得到我们的Promise
const lotteryPromise = new Promise(function (resolve, reject) {
  console.log('正在开奖中。。。🤞🤞🤞');
  setTimeout(function () {
    if (Math.random() >= 0.5) {
      resolve('恭喜你中奖了💴');
    } else {
      reject(new Error('感谢你对公益做出的贡献☺'));
    }
  }, 2000);
});

lotteryPromise.then(res => console.log(res)).catch(err => console.error(err));

在这里插入图片描述

这个示例就是一个简单把异步行为都变成了Promise

将setTimeout转换为Promise

为什么我们需要将setTimeout转换为Promise呢?setTimeout它非常常用,它的作用就是使用回调函数的方式来处理异步操作,前面我们说过,使用回调函数处理异步的操作可能会导致‘回调地狱’,而Promise链式更具有结构化,这里我们举一个简单的例子

const wait = function (seconds) {
  return new Promise(function (resolve) {
    setTimeout(resolve, seconds * 1000);
  });
};

wait(2)
  .then(() => {
    console.log('等待两秒钟');
    return wait(1);
  })
  .then(() => console.log('等待一秒钟'));

在这里插入图片描述

这样我们就把回调函数的形式变成一个调用链的形式;


http://www.kler.cn/a/465775.html

相关文章:

  • 并发服务器框架——zinx
  • 【LeetCode Hot100 二分查找】搜索插入位置、搜索二维矩阵、搜索旋转排序数组、寻找两个正序数组的中位数
  • uniapp中判断设备类型
  • Uniapp中使用`wxml-to-canvas`开发DOM生成图片功能
  • C# 设计模式(结构型模式):桥接模式
  • Rabbitmq追问1
  • LQ24fresh
  • Java项目实战II基于微信小程序的家庭大厨(开发文档+数据库+源码)
  • 经典文献阅读之--Senna(桥接大型视觉语言模型和端到端自动驾驶)
  • el-table动态行和列及多级表头
  • 【每日学点鸿蒙知识】Video播放失败、toggle拖拽、图片裁剪旋转等
  • C语言----函数
  • postgres docker安装
  • 【数据仓库】hadoop3.3.6 安装配置
  • [CTF/网络安全] 攻防世界 command_execution 解题详析
  • df.groupby与apply一起使用,举例项目中实际经常使用的场景
  • 基于SpringBoot的网上订餐系统(源码+数据库+文档)
  • C# _ 数字分隔符的使用
  • 2024年中国航天发射列表(68次发射,失败2次,部分失败1次)
  • python 给钉钉发消息简易demo
  • 带虚继承的类对象模型
  • 关于计算机中上下文概念的理解
  • Mac iTerm2集成DeepSeek AI
  • 一文读懂插值法
  • Tailwind CSS 实战:企业级 Dashboard 布局开发
  • 推荐PWM通信控制电机应用32位单片机