Javascript 为什么我们需要JS中的承诺

Javascript 为什么我们需要JS中的承诺,javascript,Javascript,我刚刚读到了这两方面的承诺。我能理解语法,但不确定我们为什么需要它 是否有一个特定的案例只能通过使用承诺来完成?或者这只是编写更干净代码的一种方式?Promise对象用于执行异步功能 从MDN文档的第一行开始: Promise对象用于异步计算。Promise表示尚未完成的单个异步操作,但在将来是可以预期的 承诺让我们能够编写更干净的代码,但减少(或完全消除)回调 此外,回调是ES2017中一些新语法功能的主干,例如异步函数,它允许以更干净的方式编写代码 当您第一次学习语法时,promises所做

我刚刚读到了这两方面的承诺。我能理解语法,但不确定我们为什么需要它


是否有一个特定的案例只能通过使用承诺来完成?或者这只是编写更干净代码的一种方式?

Promise对象用于执行异步功能

从MDN文档的第一行开始:

Promise对象用于异步计算。Promise表示尚未完成的单个异步操作,但在将来是可以预期的


承诺让我们能够编写更干净的代码,但减少(或完全消除)回调

此外,回调是ES2017中一些新语法功能的主干,例如
异步函数
,它允许以更干净的方式编写代码


当您第一次学习语法时,promises所做的第三件事并不是很明显——自动错误处理。承诺允许错误沿着链传递并在一个公共位置进行处理,而无需进行分层的手动错误处理。

这只是为了编写更干净的代码。看看这个:

它说:

首先,承诺可以缓解“末日金字塔”:代码向右移动的速度比向前移动的速度快

Promise对象用于异步计算。许诺 表示尚未完成的单个异步操作, 但在未来是可以预期的

这里有一个例子。你可以在这里运行它

这个例子说明了两件事:

首先,我们附加到promise的处理程序确实是在所有其他代码异步运行后调用的

第二,只有在承诺得到满足时才调用实现处理程序,并使用其解析的值(在本例中,是掷骰子的结果)。拒绝处理程序也是如此


归功于Mozilla和

我们需要它,因为在functional JS中它是必不可少的。使用“标准”JavaScript无法实现的承诺是无法实现的。它是对异步操作的一种非常强大的抽象,可以产生更清晰的代码。不过,完全是可选的。而且,如果只是一层嵌套,我觉得只使用回调更容易。问题是MDN中的示例,其他地方似乎不需要这样编写。如果只是为了写更干净的代码,我可以理解。只是不确定背后是否隐藏着有用的东西。嗨,我理解语法是如何工作的。仅此示例并不能说明使用该工具的良好情况。就像在您的示例中,我们可以用两个console.log行替换fulfill()和reject(),并获得相同的结果。您不需要它。它只是针对这种情况和异步请求而设计的。如果您使用当前的方法就可以了,只要您能够理解其他人使用承诺时的代码。如果有帮助,请告诉我!
function dieToss() {
  return Math.floor(Math.random() * 6) + 1;
}

console.log('1');
var promise = new RSVP.Promise(function(fulfill, reject) {
  var n = dieToss();
  if (n === 6) {
    fulfill(n);
  } else {
    reject(n);
  }
  console.log('2');
});

promise.then(function(toss) {
  console.log('Yay, threw a ' + toss + '.');  
}, function(toss) {
  console.log('Oh, noes, threw a ' + toss + '.');  
});

console.log('3');