ES6由一道前端阿里面試題的思考

2021-08-29 01:40:25 字數 1591 閱讀 4127

題目

const timeout = ms =>

new promise((resolve, reject) => , ms);

});const ajax1 = () =>

timeout(2000).then(() => );

const ajax2 = () =>

timeout(1000).then(() => );

const ajax3 = () =>

timeout(2000).then(() => );

// 在mergepromise編寫**,使得執行結果為: 1 2 3 done [1,2,3]

const mergepromise = (ajaxarray) =>

mergepromise([ajax1, ajax2, ajax3])

.then(data => );

// 執行結果為: 1 2 3 done [1,2,3]

注意其中的ajax1的設定的tiemout比ajax2的長,所以同步執行的話,先輸出2。

呼叫mergepromise後可執行then,所以mergepromise返回promise物件或者async函式本身也是promise

利用await 將非同步變同步

const mergepromise = async (ajaxarray) => 

return arr

}

promise和await 結合,其實和第一種沒太大區別

const mergepromise = async (ajaxarray) => 

resolve(arr)

})}

問題提問者想出的方法

promise和reduce

const mergepromise = (ajaxarray) =>)

});});

})}

很敬佩的一位前端老師的方法,暫時沒理解他的寫法。需要慢慢研究一下

不對現有**引入任何的新語法

用到了遍歷器的資料結構

用到了尾遞迴

巧妙的用了你的timeout我用了0構建了 macrotask

用了函式式程式設計最經典的直接掛方法 避開了then

const mergepromise = (ajaxarray) => 

function todo(item) );

}todo.then = (data) => );

todo(ajaxarray[0]);

}return todo;

}

題目肯定都很難,要多想想,不能一開始就放棄,遇到難的東西太多了,只能靠自己去解決。不能給自己想後路,不懂還有其他大神抗著。

前端面試題 ES6

1.反引號 標識 模板字串 template string 是增強版的字串,用反引號 標識,它可以當作普通字串使用,也可以用來定義多行字串,或者在字串中嵌入變數 var name bob time today hello how are you hello bob,how are you today...

阿里一道機械人面試題。

某程式設計師開發出了一款超級智慧型機械人,能對任何提問給出 是 或者 不是 的答案。現有3個這種機械人,其中有數量不定的 0到3個 機械人發生了故障。如果正常機械人總是給出正確的答案,而故障機械人總是給出錯誤的答案。每一回合只能問任意乙個機械人任意乙個問題,那麼至少需要 回合才能確保區分出哪些機械人...

一道阿里面試題 關於print自加的操作結果解釋

int main 輸出結果 335 3兩個要點 printf的操作是從右到左計算表示式的值,將返回值 位址 存入相應的快取區。表示式計算完畢後,將所有快取區按計算順序入棧,依次彈棧輸出。對於返回值,前置 i返回的是i變數本身的位址,而後置i 返回的是臨時快取區的位址 我們知道i 是先返回i再 1 問...