2016-04-15 107 views
1

我只是想知道如果JavaScript承諾內部使用回調。它是避免毀滅金字塔並使代碼整潔的規範嗎? (它內部做的回調的東西?)承諾內部工作

+1

我認爲這取決於瀏覽器。爲什麼它很重要? – llamerr

+1

'var myPromise = function(){ return { then:function(handler){ var data = 100; handler(data); } }; }'... [Demo](https://jsfiddle.net/rayon_1990/4dqkzzaa/) – Rayon

+1

我想你是在談論一些被稱爲「回撥地獄」的東西。這是我對承諾的最喜歡的文章之一,它正確地談論了承諾的這個方面:https://blog.domenic.me/youre-missing-the-point-of-promises/ – Herku

回答

1

當然,它使用「回調」的意義上說,它調用一個函數傳入.then(callback),但承諾不僅僅是一個回調。它

  • 處理異常,並拒絕「理性」與.then(onFulfilled, onRejected)
  • onRejected部分是可鏈接的,即.then().then().then()...這使得「回調」很組合的

一切你可以用一個承諾去做,你也可以做一個回調,但承諾的確有時候更容易閱讀,維護,並且避免了你提到的「厄運金字塔」。

+0

一個很好的例子證明了可鏈接的承諾是關於一層使用已經格式化的數據從服務器接收數據並重新格式化第二層。這帶來了問題的分離,並且非常容易實現 – Walfrat

+0

@kavun這就好像我們可以通過在js中創建xmlhttpreq對象等,而無需編寫大量代碼來更輕鬆地在jquery中創建ajax。獲得模塊化,易於管理的代碼。請糾正我,如果我錯了,並感謝信息! – Vino

+0

如果您在'$ .ajax'上使用'success'回調選項,則可以使用回調代替jqXHR(實現承諾接口),所以無論哪種方式都比原生的'XMLHttpRequest'好 – kavun