兩者之間的主要區別在於,使用回調方法時,我們通常只是將回調傳遞給一個函數,該函數將在完成時被調用以獲取某些結果。但是,在Promise中,您將回調附加在返回的Promise對象上。
1.callback
回調函數本身是我們約定俗成的一種叫法,我們定義它,但是並不會自己去執行它,它最終被其他人執行了。
優點:比較容易理解;
缺點:1.高耦合,維護困難,回調地獄;2.每個任務只能指定一個回調函數;3.如果幾個異步操作之間並沒有順序之分,同樣也要等待上一個操作執行結束再進行下一個操作。
2.Promise
ES6給我們提供了一個原生的構造函數Promise,Promise代表了一個異步操作,可以將異步對象和回調函數脫離開來,通過.then方法在這個異步操作上綁定回調函數,Promise可以讓我們通過鏈式調用的方法去解決回調嵌套的問題,而且由於promise.all這樣的方法存在,可以讓同時執行多個操作變得簡單。
promise對象存在三種狀態:
1)Fulfilled:成功狀態
2)Rejected:失敗狀態
3)Pending:既不是成功也不是失敗狀態,可以理解為進行中狀態
Promise的缺點:
1.當處於未完成狀態時,無法確定目前處於哪一階段。
2.如果不設置回調函數,Promise內部的錯誤不會反映到外部。
3.無法取消Promise,一旦新建它就會立即執行,無法中途取消。
想要了解更多關於web前端技術內容歡迎關注尚硅谷教育!