ES6----Promise(部分)
阿新 • • 發佈:2020-08-04
Promise
Promise是非同步程式設計的一種解決方案,比傳統的解決方案--回撥函式和事件--更合理和更強大。
Promise是一個物件,它從可以獲取非同步操作的訊息。Promise提供統一的API,各種非同步操作可以用的方法進行處理。
Promise物件有以下兩個特點:
1.物件的狀態不受外界影響。promise物件代表一個非同步操作,有三種狀態:pending(進行中),fulfilled(已成功)和rejected(已失敗)。
2,一旦狀態改變,就不會再變,任何時候都可以得到這個結果。
好處:有了promise物件,就可以將非同步操作以同步操作的流程表達出來,避免了層層巢狀的回撥函式。此外,promise物件提供統一的介面,使得控制非同步操作更加容易。
缺點:無法取消promise,一旦新建它就會立即執行,無法中途取消。其次,如果不設定回撥函式,promise內部丟擲的錯誤,不會反應到外部。第三,當處於pending狀態時,無法得知目前進展到哪個階段。
Promise.prototype.then()
then方法返回的是一個新的Promise例項,因此可以採用鏈式寫法,即then方法後面再呼叫另一個then方法。
getJSON("/posts.json").then(function(json) { return json.post; }).then(function(post) { // ... });
採用鏈式的then
Promise
物件(即有非同步操作),這時後一個回撥函式,就會等待該Promise
物件的狀態發生變化,才會被呼叫。
Promise.prototype.catch
promise
丟擲一個錯誤,就被catch()
方法指定的回撥函式捕獲。
const promise = new Promise(function(resolve, reject) { throw new Error('test'); }); promise.catch(function(error) { console.log(error); });
Promise.prototype.finally()
finally()方法用於指定不管promise物件最後狀態如何,都會執行的操作。
promise .then(result => {···}) .catch(error => {···}) .finally(() => {···});
上面程式碼中,不管promise
最後的狀態,在執行完then
或catch
指定的回撥函式以後,都會執行finally
方法指定的回撥函式。
Promise.all()
Promise.all()
方法用於將多個 Promise 例項,包裝成一個新的 Promise 例項。