從這一篇,我將一步步帶大家寫出一個promise,大家不用着急,我這博客是邊寫,邊做的筆記,所以有可能囉嗦,
也會出現很多錯誤,不過我們不着急,一點點解決,總會全部搞定的!
在學習promise 之前呢,我希望你有es6基礎知識,什麼解構語法,let const 都要會用,這起碼的吧!
————————————————————————————————————————————————————————
開始,準備
在js 中,函數是第一原型
const fn = new Fn(); fn 就是實例對象, new 一個,肯定就是實例對象了!
Fn.prototype Fn 就是函數對象了,因爲它不是實例對象,就是函數對象,我也成爲類對象!
上面稍微理解下就行了,以後還會慢慢看到,
上面就是同步的回調,它會先遍歷完數組,再打印最後一條語句
好,異步回調:
看到沒, 異步的回調會放到回調隊列中,所以執行慢一點,後執行!
——————————————————————————————————————————————
一般我們去學js 的時候,會出現報錯信息,我們都能很開心的處理好,所以沒有注意到底是啥錯誤類型,上面列表出來了
學過java 都知道類有子類,父類的概念,比如,哺乳動物,有人,牛,馬等,算了,我給大家畫一個圖:
人,牛,馬都是哺乳動物,所以哺乳動物就是父類, 而人牛馬就是哺乳動物的子類
說白了,人牛馬是哺乳動物的一種
而我們的錯誤
23456 類型的錯誤都是1錯誤的一種!
——————————————————————————————
行,錯誤的知識都在上面了,下面我們就好好體會下錯誤!
1, 引用變量不存在,我們寫寫!
這個和Java空指針差不多,我感覺,就是指針找不到對象!
1. 錯誤的類型
Error: 所有錯誤的父類型
ReferenceError: 引用的變量不存在
TypeError: 數據類型不正確的錯誤
RangeError: 數據值不在其所允許的範圍內
SyntaxError: 語法錯誤
2. 錯誤處理
捕獲錯誤: try ... catch
拋出錯誤: throw error
3. 錯誤對象
message屬性: 錯誤相關信息
stack屬性: 函數調用棧記錄信息
*/
// 1. 常見的內置錯誤
// 1). ReferenceError: 引用的變量不存在
// console.log(a) // ReferenceError: a is not defined
// console.log('-----') // 沒有捕獲error, 下面的代碼不會執行
// TypeError: 數據類型不正確的錯誤
// let b
// // console.log(b.xxx) // TypeError: Cannot read property 'xxx' of undefined
// b = {}
// b.xxx() // TypeError: b.xxx is not a function
// RangeError: 數據值不在其所允許的範圍內
// function fn() {
// fn()
// }
// fn() // RangeError: Maximum call stack size exceeded
// SyntaxError: 語法錯誤
// const c = """" // SyntaxError: Unexpected string
// 2. 錯誤處理
// 捕獲錯誤: try ... catch
// try {
// let d
// console.log(d.xxx)
// } catch (error) {
// console.log(error.message)
// console.log(error.stack)
// }
// console.log('出錯之後')
// 拋出錯誤: throw error
function something() {
if (Date.now()%2===1) {
console.log('當前時間爲奇數, 可以執行任務')
} else { // 如果時間是偶數拋出異常, 由調用來處理
throw new Error('當前時間爲偶數無法執行任務')
}
}
// 捕獲處理異常
try {
something()
} catch (error) {
alert(error.message)
}