前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个现实生活中的例子让你理解Promise的使用场景

一个现实生活中的例子让你理解Promise的使用场景

作者头像
lilugirl
发布2020-10-13 23:06:53
7080
发布2020-10-13 23:06:53
举报
文章被收录于专栏:前端导学

假设你有一个好朋友的孩子即将在本月出生,具体出生日期不确定,孩子的性别不确定,你每月15号发工资,你希望在你有工资的情况下 ,等孩子出生第一时间知道孩子的性别,给孩子买一个合适的礼物。在这种场景下你需要做两件等待的事情,1 :孩子什么时候出生及孩子的性别 2 :等你发工资。

现在我们来用Promise模拟这个应用场景

代码语言:javascript
复制
// 假设今天是月初的第一天
// 用随机数A模拟孩子出生的日期
// 用随机数B模拟孩子的性别 0是女孩 1是男孩
// 用随机数C来模拟当月的工资 (销售人员的工资随机性比较大)
console.log('---------先知的预测------------')
let A = Math.floor(Math.random() * 30) + 1;
console.log('孩子将在本月' + A + '日出生');
let B = Math.round(Math.random() * 1);
console.log('孩子的性别是' + B === 1 ? "男孩" : "女孩");
let C = Math.floor(Math.random() * 1000) + 3000 // 3000元底薪+0-1000元的随机绩效
console.log('当月工资是' + C);
console.log('-----------先知预测结束--------------------');

//我们定义一个promise对象promiseBirth  因为今天是月初,我们等待孩
//子出生的时间就从今天到孩子出生日的时长 比如今天是1号,孩子是13号出
//生,那么我们需要等13天(用13秒模拟)才知道孩子的性别 ,孩子的性别也是随机的

let promiseBirth = new Promise((resolve, reject) => {
  setTimeout(() => { // 使用setTimeout模拟等待的过程
    resolve(B); // 等待孩子出生之后,获取到孩子的性别
  }, A * 1000)
})

// 我们在定义一个等待发工资的promise对象promiseMoney ,15号发工资模拟等待15秒
let promiseMoney = new Promise((resolve, reject) => {
  setTimeout(() => { // 使用setTimeout模拟等待的过程
    resolve(C); // 等到发工资日 就获取到了工资的实际数量
  }, 15 * 1000)
})


// 制定购买礼物的决策
function decision(sex, money) {
  if (sex) {
    // 如果是男孩 
    if (money > 3500) {
      // 如果钱足够多
      console.log('买个男孩的礼物,价格可以贵点');
    } else {
      console.log('买个男孩的礼物,价格不要太贵');
    }
  } else {
    if (money > 3500) {
      // 如果钱足够多
      console.log('买个女孩的礼物,价格可以贵点');
    } else {
      console.log('买个女孩的礼物,价格不要太贵');
    }
  }
}


let sex; // 使用sex存储孩子的性别
let money //使用money存储当月工资

// 常规做法  promise前套
console.log('----------安静的等待孩子出生-----------');
promiseBirth.then((res) => {
  sex = res;
  console.log('等到孩子出生了');
  console.log('孩子的性别是' + res ? "男孩" : "女孩")

  console.log('----------安静的等待发工资-----------');
  promiseMoney.then((res2) => {
    money = res2;
    console.log('等到发工资了');
    console.log('当月工资是' + res2);

    // 知道了孩子的性别,工资数 这里可以做决策了  买什么样的礼物,费用预算是多少
    console.log('在等待了' + (A + 15) + '秒之后 开始做决策');
    decision(sex, money);

  })
})

// 使用prmoise all
Promise.all([promiseBirth, promiseMoney]).then(() => {
  console.log('使用Promise all 等待  获取到了孩子的性别 和当月的工资');

  console.log('在等待了' + (A > 15 ? A : 15) + '秒之后 开始做决策');
  // 开始做决策
  decision(sex, money);
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档