你能向初学者解释一下“承诺”、“异步”和“回调”之间的区别吗?这些术语如何相互关联?这些是同一件事吗?不同的东西?我什么时候使用哪个?
异步是启动计算并提供函数或注册处理程序的一般设计模式,该处理程序最终将在计算完成时使用计算结果进行调用(而不是在开始其他工作之前阻塞并等待计算完成) 。如果没有异步,同时启动多个计算需要使用线程。
“回调”是指您提供给异步计算的函数,该函数将在计算完成时被调用。它被称为“回调”,因为它由异步函数调用,并且在被调用时,它将控制流返回到您可以控制的代码中。
“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 编写,但使用 Promise 的主要优点是一致性(例如,成功回调和失败回调在参数列表中的位置、是否支持失败回调等)和支持库可以将它们结合在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)