.NET CLI簡單教程和專案結構
ECMAscript 6 原生提供了 Promise 物件
Promise物件代表了未來將要發生的事件,用來傳遞非同步操作的資訊
Promise物件有一下兩個特點:
1、 物件的狀態不受外界影響, Promise物件代表一個非同步操作,有三種狀態:
-
pending: 初始狀態,意為等待中,懸而未決的
-
fulfilled: 操作成功完成
-
rejected: 操作失敗
只有非同步操作的結果,可以決定當前式哪一種狀態,任何其他操作都無法改變這個狀態。
2、 一旦狀態改變,就不會再變,任何時候都可以得到這個結果。Promise 物件的狀態改變,只有兩種可能:從 Pending 變為 Resolved 和從 Pending 變為 Rejected。只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果。就算改變已經發生了,你再對 Promise 物件添加回調函式,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的。
Promise 優缺點
有了Promise物件, 就可以將非同步操作以同步操作的流程表達出來,避免了層層巢狀回撥函式,此外,Promise物件提供統一的介面,使得控制非同步操作更加容易。
Promise 也有一些缺點,首先,無法取消Promise, 一旦新建它就會立即執行,無法中途取消,其次,如果不設定回撥函式,Promise內部丟擲的錯誤,不會反應到外部。第三,當處於Pending狀態時,無法得知目前進展到哪一個階段(剛剛開始還時即將完成)
Promise 建立
要想建立一個Promise物件、可以用 new 來呼叫 Promise 的構造器來進行例項化。
下面時建立 Promise 的步驟
var promise = new Promise(function(resolve,reject) {
// 非同步處理
// 處理結束後, 呼叫 resolve 或 reject
});
Promise 建構函式包含一個引數和一個帶有 resolve(解析)和 reject(拒絕)兩個引數的回撥。在回撥中執行一些操作(例如非同步),如果一切都正常,則呼叫 resolve,否則呼叫 reject。
var onePromise = new Promise(function(resolve,reject) { // 當衣服程式碼執行成功時, 呼叫resolve(...), 當非同步程式碼失敗時呼叫 reject(...) setTimeout(function(){ resolve("成功!"); }, 300) }); onePromise.then(function(successMessage){ // successMessage 的值時上面呼叫resolve(...)方法傳入的值 document.write() })
對於已經例項化過的 promise 物件可以呼叫 promise.then() 方法,傳遞 resolve 和 reject 方法作為回撥。
promise.then() 是 promise 最為常用的方法.
promise.then(onFulfilled, onRejected)
promise簡化了對error的處理, 上面的程式碼我們也可以這樣寫:
promise.then(onFulfilled).catch(onRejected)