就快過年了,項目組是準備在回去之前,發完2.4版本。然后現在已經進入測試后期了。
趁著現在有點時間,把之前一直想寫的promise寫一下。
剛說完就來一個Bug,先去改bug。
過了N個半小時后,又回來了。讓我們直接進入主題。
Promise 是什么
承諾。就像有人問:你是男的嗎?你可以做出倆種回答:是或者不是。
回答是,那就是肯定的承諾。
回答不是,那就是拒絕的承諾。
只能有倆種嗎?是的,Promise里面只能有兩種承諾,肯定或否定。
那我什么時候需要這樣的承諾?感覺用不上啊?在異步調用的時候。
Promise怎么用?
一般學習一個新東西,最直接的問題是怎么用。不然有可能造成看了一堆理論,還是云里霧里。引用一句話就是:道理我都懂,然后呢?
新建Promise對象
Promise作為構造函數,新建如下:
var handler = new Promise(function (resolve, reject) {
... // 邏輯代碼
});
嗯,新建Promise對象很簡單嘛,就傳入一個函數作為參數,然后邏輯代碼在函數里面。這個函數再帶著 resolve 和 reject 倆個函數作為參數。
什么?resolve & reject是函數?沒錯,他們是函數。那他們有什么作用?
resolve 表示肯定承諾。
reject 表示否定承諾。
then?
定義了Promise對象,然后呢?然后就要處理肯定或者否定的承諾啊。
var handler = new Promise(function (resolve, reject) {
... // 邏輯代碼
});
handler.then(function (val) {
... // 肯定承諾的回調
}, function (e) {
... // 否定承諾的回調
});
這里可以看到,then(resolve, reject)
方法接收兩個參數,分別是肯定承諾的回調和否定承諾的回調。
到這里,基本的Promise使用就介紹結束了。什么?還是不懂?我們看看例子。
例子
我們來看看這個例子,新建了Promise對象,500ms后進行了肯定的承諾。因為新版Chrome和Firefox是自帶Promise,所以我們可以直接在控制臺里測試。
肯定承諾例子:
// ex1
var startTime = Date.now();
console.log('start', startTime);
var handler = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('done', Date.now() - startTime);
}, 500);
});
handler.then(function (val) {
console.log('then resolve', val, Date.now() - startTime);
}, function (e) {
console.log('then reject', e, Date.now() - startTime);
});
嗯,在這個例子了,我們可以明顯感受到 resolve 函數的用法。那么 reject 呢?其實是差不多的。
否定承諾例子:
// ex2
var startTime = Date.now();
console.log('start', startTime);
var handler = new Promise(function (resolve, reject) {
setTimeout(function () {
reject('done', Date.now() - startTime);
}, 500);
});
handler.then(function (val) {
console.log('then resolve', val, Date.now() - startTime);
}, function (e) {
console.log('then reject', e, Date.now() - startTime);
});
在上面這個例子,給出了拒絕的承諾,然后就會執行 then 方法的 reject 回調函數。是不是很簡單。
ok,到目前為止,你可以大聲的說,你會用promise啦~不過這個只是簡單的介紹,讓大家初步了解而已。
下一篇,介紹Promise的詳細使用。