如何理解es6中的Promise?前端
試題解析:考查對JS中同步異步的理解,及工做中經常使用的使用場景es6
js是單線程的,也就是說一次只能完成一個任務,爲了解決這個問題,js將任務的執行模式分爲兩種, 同步和異步, 在es5中咱們處理異步只能經過的回調的方式進行處理,在多層異步中,回調會一層一層嵌套,也就是所謂的回調地獄,promise就是異步編程的一種解決方案web
特色:編程
基本用法:promise
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 異步操做成功 */){
resolve(value); // 將狀態從pendding變成fulfilled
} else {
reject(error); // 將狀態從pendding變成rejected
}
});
複製代碼
promise 生成實例後可使用then方法接收resolved狀態和rejected狀態的回調函數緩存
promise.then( ()=> {
console.log('resolved')
}, () => {
console.log('rejected')
})
複製代碼
promise原型上具備catch方法, catch方法是rejection的別名, 用於指定發生錯誤時的回調函數安全
promise.then( ()=> {
console.log('resolved')
}, () => {
console.log('rejected')
}).catch( (err) => {
console.log('catch')
})
複製代碼
promise原型上具備finally方法,用於無論promise對象最後的狀態如何,都會執行的操做bash
promise.then( ()=> {
console.log('resolved')
}, () => {
console.log('rejected')
}).finally( (err) => {
console.log('end')
})
複製代碼
Promise.all方法用於將多個 Promise 實例,包裝成一個新的 Promise 實例異步
簡單使用:模塊化
const p = Promise.all([p1, p2, p3]);
複製代碼
特色:
爲什麼實現一個promise
JS每日一題: 前端的緩存有哪些?都適用什麼場景?區別是什麼?
JS每日一題: Call,Apply,Bind的使用與區別,如何實現一個bind?
JS每日一題: 說說你對前端模塊化的理解
JS每日一題: web安全攻擊手段有哪些?以及如何防範
JS每日一題能夠當作是一個語音答題社區
天天利用碎片時間採用60秒內的語音形式來完成當天的考題
羣主在第二天0點推送當天的參考答案