做題學知識(4)之 Promise

2021-09-29 18:34:34 字數 2673 閱讀 7327

請問是列印出來錯誤 1 還是錯誤 2 呢?

new promise((resolve, reject) => )}).then(val => ).catch(error => )
請問列印出來什麼?

new promise((resolve, reject) => )}).then(val => , error => ).catch(error => )
請問是列印出來錯誤 1 還是錯誤 2 呢?

new promise((resolve, reject) => )}).then(val => , error => ).catch(error => )
這幾道題主要考察了 promise 執行機制。僅僅是了解了 promise 的各個語法糖,了解的不夠細緻答出來了也就屬於猜對的。

promise 有三種狀態,pending(初始狀態),fulfilled(完成),rejected(拒絕)。狀態更改一旦完成就不能在修改,promise 的建構函式接受乙個 executor(自執行)函式。自執行函式提供倆個值為函式的引數:resolve,reject。當 resolve 執行的時候狀態變為 fulfilled,當 reject 執行的時候狀態變為 fulfilled。

通過 promise 建立的物件有 then、catch、finally 三個方法。then 接受倆個值為函式的引數: onfulfilled 和 onrejected 。當狀態變為 fulfilled 的時候 onfulfilled 就會呼叫;當狀態變為 rejected 的時候 onrejected 就會呼叫,並且返回值都是新的 promise 建立的物件。catch 方法相當於 then(null, onrejected)。finally 是當狀態無論變為啥都會執行的方法。

new promise((resolve, reject) => )}).then(val => ).catch(error => )
這個題只有乙個 then,而 catch 本身呼叫的就是 then 的 onrejected 方法,因此可以縮寫為這樣:

new promise((resolve, reject) => )}).then(val => , error => )
這樣就很明顯了,then 提供的倆個函式 onfulfilled 和 onrejected。只有當狀態 變為 fulfilled 的時候才會執行 onfilled。當狀態變為 rejected 的時候才會執行 onrejected。建構函式只呼叫了 reject 函式。因此狀態只能變為 rejected。所以 onfulfilled 壓根就不會執行。因此答案是列印錯誤1請問列印出來什麼?

new promise((resolve, reject) => )}).then(val => , error => ).catch(error => )
這個題一打眼就能看出來會列印 3,糾結的是 4。這裡 4 是不列印的,原因也很簡單,當 then 的 onfulfilled 和 onrejected 其中有乙個執行的時候就會返回新的 promise。也就是 catch 方法已經換了掛載物件,而新的 promise 又沒有執行 reject 函式,所以肯定不會觸發 catch。因此答案是只列印 3請問是列印出來錯誤 1 還是錯誤 2 呢?

new promise((resolve, reject) => )}).then(val => , error => ).catch(error => )
promise 的狀態一但變更就不會在發生更改。建構函式中狀態變成了 fulfilled 所以 then 中的函式 onfulfilled 會執行,而 onrejected 不會執行。所以錯誤1是肯定不會列印的。然後 then 中報錯會被 try catch 捕獲到,將新的 promise 的狀態變為 rejected,因此最後的 catch 會被執行,列印出來錯誤 2。因此答案是錯誤 2從這道題你也可以看出來 onfulfilled 中報的錯誤只有下乙個 then 的 onrejected 能夠捕獲到,如果不寫下乙個 then。onfulfilled 函式的報錯在 node 環境中就會提示你沒有提供 onrejected。而終止執行,因此建議大家多用 catch ,少用then 的第二個函式 onrejected。這樣就不會出現少捕獲錯誤的情況。

promise 作為新的非同步解決方式不僅寫法優雅而且提供的 api 都是常見的正規化,例如:

all:多個 promise 並行觸發,全部執行完成獲得呼叫結果。

race:多個 promise 並行觸發,其中乙個執行完成立刻獲得執行結果

因此 promise 就特別流行,掌握它就成了必備技能之一。簡單熟悉 api 可能你在專案中拿來直接用是沒有問題的,但是只有深入理解他你才能夠在各種面試中游刃有餘的解答各種**問題。

做題學知識(1)

1 2 3 map parseint 這題主要考查了陣列的 map 方法和 parseint 的用法。map 1,2,3 map currentvalue,index,arr 2,4,6parseint parseint 4 4parseint 4 10 4parseint 0101 2 5因此上面...

4 運籌學復刻 之 對偶問題

前面說的單純形法針對從一組可行基解開始迭代,最終得到最優解,下面如果我們如何從不可行解得到最優解呢?我們首先說一說對偶問題 min 對應 構造 max 對應 構造 變數範圍都是 無限max z ctx s.t.ax b x 0 min w ytb s.t.yt a ct y無限制 eg.max z ...

跟我學shiro realm之資源許可權(4)

編寫ini 檔案 在ini檔案中使用者 角色 許可權的配置規則是 使用者名稱 密碼,角色1,角色2.角色 許可權1,許可權2.首先根據使用者名稱找角色,再根據角色找許可權,角色是許可權集合。許可權字串的規則是 資源識別符號 操作 資源例項識別符號 意思是對哪個資源的哪個例項具有什麼操作,是資源 操作...