2016-04-15 68 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