1. 首页

你真的了解 Promise 吗?来试试这几道题,专治各种不服

第1题


var p = new Promise((resolve, reject) => { reject(Error('The Fails!')) }) p.catch(error => console.log(error.message)) p.catch(error => console.log(error.message))

输出结果是什么?

  • A. 打印一次 ‘The Fails!’
  • B. 打印两次 ‘The Fails!’
  • C. UnhandledPromiseRejectionWarning
  • D. 进程退出
  • 码农进阶题库,每天一道面试题 or Js小知识 https://www.javascriptc.com/interview-tips/

例子中用构造函数创建了一个 Promise,然后用 reject 回调立即触发一个错误。.catch 处理函数跟 DOM 的.addEventListener(event, callback) 或者 Event Emitter 中的.on(event, callback)类似,可以添加多个回调函数。因此,每个回调函数都会被调用,接收的参数也是一样的。

答案:B

Js中文网 – 前端进阶资源教程 www.javascriptC.com,typescript 中文文档
一个帮助开发者成长的社区,你想要的,在这里都能找到

第2题


var p = new Promise((resolve, reject) => { return Promise.reject(Error('The Fails!')) }) p.catch(error => console.log(error.message)) p.catch(error => console.log(error.message))

输出结果是什么?

  • A. 打印一次 ‘The Fails!’
  • B. 打印两次 ‘The Fails!’
  • C. UnhandledPromiseRejectionWarning
  • D. 进程退出

如果使用构造函数创建 Promise,必须调用resolve或者reject 。这里在构造函数中返回了一个新的 Promise,外层的 Promise 并没有用到它的返回值,内部的 Promise 后面没有.catch,因此答案是 UnhandledPromiseRejectionWarning

答案:C

第3题


var p = new Promise((resolve, reject) => { reject(Error('The Fails!')) }) .catch(error => console.log(error)) .then(error => console.log(error))

输出结果是什么?

  • A. 打印错误和 undefined
  • B. 打印两次错误
  • C. UnhandledPromiseRejectionWarning
  • D. undefined

当链式调用.then.catch时,可以看成是一系列的步骤。每个 .then 接收前一个.then的返回值作为参数。但是,如果某一步碰到错误时,后续的.then都会被跳过,直到碰到一个.catch。如果要重写某个错误,只要返回一个非错误值就行了。这样它就可以被后续的.then获取到。 提示: console.log() 总是返回 undefined

答案:A

第4题


var p = new Promise((resolve, reject) => { reject(Error('The Fails!')) }) .catch(error => console.log(error.message)) .catch(error => console.log(error.message))

输出结果是什么?

  • A. 打印一次错误信息
  • B. 打印两次错误信息
  • C. UnhandledPromiseRejectionWarning
  • D. 进程退出

链式调用.catch时,每个.catch只处理前面的.then.catch抛出的错误。这个例子中,第一个.catch 返回值是console.log,这个值只有在两个.catch后加一个.then才能拿到。

答案:A

Js中文网 – 前端进阶资源教程 www.javascriptC.com,typescript 中文文档
一个帮助开发者成长的社区,你想要的,在这里都能找到

第5题


new Promise((resolve, reject) => { resolve('Success!') }) .then(() => { throw Error('Oh noes!') }) .catch(error => { return "actually, that worked" }) .catch(error => console.log(error.message)) //码农进阶题库,每天一道面试题 or Js小知识 https://www.javascriptc.com/interview-tips/

输出结果是什么?

  • A. print message once
  • B. print message twice
  • C. UnhandledPromiseRejectionWarning
  • D. nothing prints

.catch 可以通过返回常规值来忽略错误。这里如果再接一个.then就能获取前面的返回值了。

答案:D

第6题


Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) })
  • A. 打印 “Success!” 和 “SUCCESS!”
  • B. 打印 “Success!”
  • C. 打印 “SUCCESS!”
  • D. 不打印

这题比较简单,.then的返回值会挨个传递给后续的.then,注意一定要return

答案:C

第7题


Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) return data }) .then(console.log) //码农进阶题库,每天一道面试题 or Js小知识 https://www.javascriptc.com/interview-tips/
  • A. print “SUCCESS!”
  • B. print “Success!”
  • C. print “SUCCESS!” and “SUCCESS!”
  • D. nothing prints

跟前面那道题一样,这里 console.log 会调用两次。

答案:C

第8题


Promise.resolve('Success!') .then(data => { data.toUpperCase() }) .then(data => { console.log(data) })
  • A. print “SUCCESS!”
  • B. print “Success!”
  • C. print “SUCCESS!” and “SUCCESS!”
  • D. prints undefined

这里第一个.then没有返回,所以后面的.then接收不到值。

答案:D

第9题


Promise.resolve('Success!') .then(() => { throw Error('Oh noes!') }) .catch(error => { return 'actually, that worked' }) .then(data => { throw Error('The fails!') }) .catch(error => console.log(error.message))
  • A. print “Oh noes!” and “The fails!”
  • B. print “Oh noes!”
  • C. print “The fails!”
  • D. print “actually, that worked”
  • E. nothing prints

很明显,第一个错误已经被第一个.catch处理了,所以第二个.catch捕获的是它前面的错误。

答案:C

作者:KaysonLi
链接:https://juejin.im/post/5df86446f265da339260bc3d

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:你真的了解 Promise 吗?来试试这几道题,专治各种不服

链接:https://www.javascriptc.com/3175.html

« 小程序项目如何设置资源的防盗链~
Js中文网周刊第07期»
Flutter 中文教程资源

相关推荐

QR code