Promise 的特點是什么,分別有什么優缺點?什么是 Promise 鏈?Promise 構造函數執行和 then 函數執行有什么區別?


Promise翻譯過來就是承諾的意思,這個承諾會在未來有一個確切的答復,並且該承諾有三種狀態,分別是:

  1. 等待中(pending)
  2. 完成了 (resolved)
  3. 拒絕了(rejected)

這個承諾一旦從等待狀態變成為其他狀態就永遠不能更改狀態了,也就是說一旦狀態變為 resolved 后,就不能再次改變

new Promise((resolve, reject) => { resolve('success') // 無效 reject('reject') }) 

當我們在構造Promise的時候,構造函數內部的代碼是立即執行的

new Promise((resolve, reject) => { console.log('new Promise') resolve('success') }) console.log('finifsh') // new Promise -> finifsh 

Promise實現了鏈式調用,也就是說每次調用then之后返回的都是一個Promise,並且是一個全新的Promise,原因也是因為狀態不可變。如果你在then中 使用了return,那么return的值會被Promise.resolve()包裝

Promise.resolve(1) .then(res => { console.log(res) // => 1 return 2 // 包裝成 Promise.resolve(2) }) .then(res => { console.log(res) // => 2 }) 

當然了,Promise也很好地解決了回調地獄的問題,可以把之前的回調地獄例子改寫為如下代碼:

ajax(url) .then(res => { console.log(res) return ajax(url1) }).then(res => { console.log(res) return ajax(url2) }).then(res => console.log(res)) 

前面都是在講述Promise的一些優點和特點,其實它也是存在一些缺點的,比如無法取消Promise,錯誤需要通過回調函數捕獲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM