我为什么要在javascript中使用Promises而不是回调?

时间:2016-08-31 13:47:09

标签: javascript es6-promise

  1. 回调地狱也称为厄运金字塔
  2. 可读性和易于调试
  3. 。所有 只是原因。 除了上面的内容,我们可以从回调和Promise中实现相同的目标。 请告诉我们。

2 个答案:

答案 0 :(得分:3)

(不基于意见:):

在长链异步操作中几乎不可能将错误正确地传回具有普通回调的调用站点,而不需要重新发明类似promises的内容。

如果你throw进行常规回调,那么错误在哪里?比较:

setTimeout(() => { throw new Error("Fail"); }, 1000);

VS

var wait = ms => new Promise(resolve => setTimeout(resolve, ms));

wait(1000)
 .then(() => { throw new Error("Fail"); })
 .catch(e => console.log("Caught: " + e)); // Caught: Error: Fail

在前一种情况下,它直接进入浏览器的控制台而没有JS知道,而在后一种情况下,它被JS捕获,可以采取纠正措施。

在没有承诺的情况下正确地传播错误需要try {} catch() {}围绕代码中的每个回调传播魔法,这是我从未见过的。

答案 1 :(得分:1)

除了您提到的原因,您可以存储承诺并在代码中的其他位置使用它。 Promise也遵循更加面向对象的范式。