第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
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程
本文著作权归作者所有,如若转载,请注明出处
转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com