Node.js承诺,异步或只是回调

时间:2014-08-05 08:07:35

标签: node.js asynchronous callback promise

你能否向初学者解释" promises"," async"和" callbacks"之间的差异。这些术语如何相互关联?这些是一回事吗?不同的东西?我什么时候使用哪个?

1 个答案:

答案 0 :(得分:7)

Async是开始计算并提供函数或注册处理程序的一般设计模式,该处理程序最终将在计算结束时使用计算结果进行调用(而不是在启动之前阻塞并等待计算完成)额外的工作)。没有异步,同时启动多个计算需要使用线程。

“回调”是指您为异步计算提供的函数,该函数将在该计算完成时调用。它被称为“回调”,因为它被异步函数调用,并且在被调用时,它将控制流返回到您可以控制的代码中。

“Promise”是一个特定的JavaScript原型和相关框架,它为以异步样式编写的代码带来一致性。 Promise表示可能已完成(可能成功或未成功)的异步计算,并提供对结果进行操作或处理错误的方法,而不管异步计算的完成状态如何。 Promise API还提供了用于组合多个异步计算的输出的实用程序(例如,在下一次计算之前等待一组或所有异步计算完成)。

举一个没有Promise的简单例子:

var addThen = function(a, b, handler) {
  var result = a + b;
  handler(result);
};

// ...
addThen(2, 3, console.log);  // prints 5
// ...

等同于Promise:

var add = function(a, b) {
  return Promise.resolve(a + b);
};

// ...
add(2, 3).then(console.log); // prints 5
// ...

异步代码可以使用和不使用Promise编写,但使用Promise的主要优点是一致性(例如,在参数列表中成功回调和失败回调的位置,是否支持失败回调等)并支持可以将它们组合在一起的库。