1. 程式人生 > 其它 >.NET CLI簡單教程和專案結構

.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)