Promise基本用法

班主任發表於2019-11-26

Promise含義

  • Promise是非同步程式設計的一種解決方案, 比傳統的解決方案--回撥函式和事件--更合理更強大。
  • 所謂的promise簡單來說就是一個容器,裡面儲存著未來才會結束的事件,它有兩個特點(1)物件的狀態不受外界影響。(2)一旦狀態改變就不會再變,任何時候都可以得到這個結果

基本用法

Promise.prototype.then()

  • then方法返回的是一個新的Promise例項(注意,不是原來的Promise例項),因此可以採用鏈式寫法,即then方法之後在呼叫另一個then
getJSON("/posts.json").then(function() {
    return json.post;
}).then(function(post) {
    // ...
});
複製程式碼

Promise.prototype.catch()

  • Promise.prototype.catch方法是.then(null, rejection)或.then(undefined, refjection)的別名,用於指定發生錯誤時的回撥函式
getJSON('/posts.json').then(function(posts) {
    // ...
})catch(function(error) {
    // 處理getJSON 和前一個回撥函式執行時發生的錯誤
    console.log('放生錯誤!', error);
});
複製程式碼

Promise.prototype.finally()

  • finally 方法用於指定不管Promise物件的最後狀態如何,都會執行的操作,該方法是ES2018引入的標準
promise.then(result => {...})
	   .catch(result => {...})
	   .finally(() => {...})
       
       
       
server.listen(port).then(function() {
    // ...
}).finally(server.stop)
複製程式碼
  • finally 方法的回撥函式不接受任何引數,因此這意味著沒有辦法知道前面的Promise狀態是fulfiled還是rejected。這表明,finally方法裡執行的操作,應該與狀態無關,不依賴與promise的執行結果

Promise.all()

  • Promise.all方法將多個Promise例項包裝成一個Promise例項
const p = Promise.all([p1, p2, p3]);
複製程式碼