首頁  >  文章  >  web前端  >  分享 9 個關於JavaScript Promises的面試題

分享 9 個關於JavaScript Promises的面試題

青灯夜游
青灯夜游轉載
2020-07-13 16:33:454952瀏覽

分享 9 個關於JavaScript Promises的面試題

請完成以下9個問題

1. 多個<span style="font-size: 18px;">.catch</span>

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

以上程式碼的輸出會是什麼?請選擇正確的答案:

  • [ ] 列印一次訊息
  • [x] 列印兩次訊息
  • [ ] UnhandledPromiseRejectionWarning
  • [ ] 程式退出

解析:

我們使用建構函式方法建立一個Promise,並透過reject 回調立即觸發錯誤。

然後.catch 運作方式類似於DOM 的.addEventListener(event,callback) 或Event Emitter 的.on(event,callback),其中可以新增多個回調。 每個都用同樣的參數來呼叫。

2. 多個.catch

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))

以上程式碼的輸出將會是什麼?請選擇正確的答案:

  • [ ] 列印一次訊息
  • [ ] 列印兩次訊息
  • [x] UnhandledPromiseRejectionWarning
  • [ ] 程式退出

解析:

分享 9 個關於JavaScript Promises的面試題

#使用Promise 建構函式時,必須呼叫resolve()reject() 回呼。 Promise 建構子不會使用你的回傳值,因此實際上不會再收到由 Promise.reject() 建立的其他 Promise。

Promise.reject() 之後沒有 .catch 時,答案是 UnhandledPromiseRejectionWarning#。

3. 連結.then.catch##

var p = new Promise((resolve, reject) => {
    reject(Error('The Fails!'))
  })
  .catch(error => console.log(error))
  .then(error => console.log(error))
以上程式碼的輸出將會是什麼?請選擇正確的答案:

    [x] 列印錯誤和
  • undefined
  • [ ] 列印兩次錯誤
  • [ ]
  • UnhandledPromiseRejectionWarning
  • [ ]
  • undefined
##解析

分享 9 個關於JavaScript Promises的面試題

# #當連結.then.catch 時,將它們視為一系列步驟會很有幫助。每個 .then 都接收前一個

.then

傳回的值作為其參數。但是,如果你的 “step” 遇到錯誤,則任何後續的

.then
    “ steps” 都會被跳過,直到遇到
  • .catch
  • 。如果要覆蓋錯誤,你要做的就是回傳一個非錯誤值。可以透過任何隨後的
  • .then
  • 存取。
  • 提示:
console.log()

總是回傳 undefined

4. 連結.catch<pre class="brush:php;toolbar:false">var p = new Promise((resolve, reject) =&gt; {     reject(Error('The Fails!'))   })   .catch(error =&gt; console.log(error.message))   .catch(error =&gt; console.log(error.message))</pre>以上程式碼的輸出將會是什麼?請選擇正確的答案:[x] 列印一次錯誤訊息

[ ] 列印兩次錯誤訊息

[ ] UnhandledPromiseRejectionWarning [ ] 程式退出解析

當連結

.catch
    時,每個只處理先前的
  • .then
  • `.catch
  • “步驟” 中引發的錯誤。在此例中,第一個
  • .catch
  • 傳回
  • console.log
  • ,只能透過在兩個
.catch

之後加上.then() 來訪問。

5. 多個

.catch

new Promise((resolve, reject) => {
    resolve('Success!')
  })
  .then(() => {
    throw Error('Oh noes!')
  })
  .catch(error => {
    return "actually, that worked"
  })
  .catch(error => console.log(error.message))

以上程式碼的輸出將會是什麼?請選擇正確的答案:[ ] 列印一次訊息[ ] 列印兩次訊息[ ] UnhandledPromiseRejectionWarning

#[x]不列印任何內容

  • 解析
  • 提示:
  • .catch
  • 可以簡單地透過傳回一個常規值來忽略(或覆蓋)錯誤。

該技巧僅在隨後的 .then 接收該值時有效。

6.

.then

之間的流程<pre class="brush:php;toolbar:false">Promise.resolve('Success!')   .then(data =&gt; {     return data.toUpperCase()   })   .then(data =&gt; {     console.log(data)   })</pre>以上程式碼的輸出將會是什麼?請選擇正確的答案:

[ ] 列印"Success!" 和"SUCCESS!"[ ] 列印"Success!"[x] 列印"SUCCESS!"[ ] 不列印任何內容

解析#########提示:.then依序傳遞數據,從### return value### 到下一個### .then(value => /* handle 值 */)###。 ######為了將值傳遞給下一個 ###.then###,###return### 是關鍵。 ############7. #########.then### 之間的流程#########
Promise.resolve('Success!')
  .then(data => {
    return data.toUpperCase()
  })
  .then(data => {
    console.log(data)
    return data
  })
  .then(console.log)
###以上程式碼的輸出將會是什麼?請選出正確的答案:###
  • [ ] 打印 "SUCCESS!"
  • [ ] 打印 "Success!"
  • [x] 打印 "SUCCESS!" 和 "SUCCESS!"
  • [ ] 不打印任何内容

解析:

有两个 console.log 调用将被调用。

8. .then 之间的流程

Promise.resolve('Success!')
  .then(data => {
    data.toUpperCase()
  })
  .then(data => {
    console.log(data)
  })

以上代码的输出将会是什么?请选择正确的答案:

  • [ ] 打印 "SUCCESS!"
  • [ ] 打印 "Success!"
  • [ ] 打印 "SUCCESS!" 和 "SUCCESS!"
  • [x] 打印 undefined

解析:

提示:.then 依次传递数据,从返回值到下一个  .then(value => /* handle value */)

为了将值传递给下一个 .thenreturn 是关键。

9. .then.catch 之间的流程

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))

以上代码的输出将会是什么?请选择正确的答案:

  • [ ] 打印 "Oh noes!" 和 "The fails!"
  • [ ] 打印 "Oh noes!"”
  • [x] 打印 "The fails!"
  • [ ] 打印 "actually, that worked"
  • [ ] 不打印任何内容

解析:

分享 9 個關於JavaScript Promises的面試題

本文转载自:https://segmentfault.com/a/1190000021255822

英文原文地址: https://danlevy.net/javascript-promises-quiz/

相关教程推荐:JavaScript视频教程

以上是分享 9 個關於JavaScript Promises的面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除