每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day22

tags: ItIron2021 Javascript

前言

昨天我们用很粗略的方式简单说明了什麽是promise,打铁要趁热,我突然好饿,我们马上来一个相关的题目做练习吧! 因为是题目练习,篇幅会很短,放心放心!

本日题目与解释

请问下方程序码会有什麽输出结果?

function promiseFn(num, time = 500) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      num ? resolve(`${num}, 成功`) : reject('失败');
    }, time);
  });
}
promiseFn(0)
.then(value => console.log(value))
.catch(err => console.log(err))

防雷防雷~~~~

thinking-day22

最终输出结果为

失败

我不是说你的人生失败,是最後会印出失败的字样?

首先我们拆解一下这个问题,promiseFn是个函数,它最终会回传一个promise,也就是说下方的程序码其实是一个promise,所以它才可以用.then或是.catch去取值

promiseFn(0)

既然最後要取值,你就要知道这麽promise最後会是fulfilled || rejected,你才知道最终回传的值是哪一个! 看一下promise内部怎麽决定的吧

num ? resolve(`${num}, 成功`) : reject('失败')

是个简单三元运算,其中会将num强制转为布林值,而0属於falsy value会被转为false,最终执行reject('失败'),这个promise最後的状态是rejected!(如果你觉得强制转型那边看不懂,那请回去看之前关於强制转型的文章:D)

剩下的就简单罗! 如果是rejected,那我们只要看catch那段程序码就好

promiseFn(0)
.then(value => console.log(value)) // 这行不会执行
.catch(err => console.log(err))  // 只执行这边,而err的值是'失败'

如何? 基本的promise应用题还算挺简单的对吧!

本日核心观念与总结

核心观念

promise

总结

  • 了解如何解决最最基本的promise应用题(我想不出今天要总结什麽)

本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!


<<:  Vue.js介绍及开发环境准备(DAY24)

>>:  大共享时代系列_021_远端桌面软件(远端连线)

Day24 - 关於共识演算法与容错机制

这几篇文章可能都会比较偏技术一些,会尽量解释简单,让大家容易理解,我们就继续看下去。 常见的共识演算...

解决 "No manual entry for gcc" 的记录

问题: $ man gcc No manual entry for gcc 看到这个方法,但是失败了...

Day 22 HTML5 <HTML5 input类型、表单标签>

HTML5新增的input类型: <!-- 需添加form表单域 --> <for...

使用Google api查询书本资讯 Day 17

这次实作的功能是使用Google Book api 使用textfield输入ISBN码按下Butt...

小蛙借钱给你的交易概念!!

先建个表方便理解 mysql> create table account ( -> id...