我一直在广泛阅读有关Web的异步编程以及在JavaScript和jQuery中使用回调。我已经理解了AJAX的基础知识。我不知道的是在异步编程中没有使用回调函数时使用。
根据我的理解,简单地向函数添加回调并不会使其成为非阻塞/异步。异步功能实际上是由环境(浏览器API)提供的。因此,向我编写的函数添加回调不会导致任何异步执行。
例如:
var X;
function Test(A, B, Callback) {
X=A+B*A*B;
Callback(X);
}
Test(99999,999999,function(Data) {
alert(Data);
});
alert("This is not printed first, as it would be in Async.");
在上面我拿了两个数字并对它们进行代数运算。即使我正在使用回调函数,执行操作时也会阻止代码执行。然后将执行回调,显示带有计算结果的警报。然后是下一个警报。如果我做了一个XMLHttpRequest而不是代数操作,我会先得到第二个警报,因为异步实现。在请求期间,代码流不会在数学运算期间发生阻塞。
因此,即使使用回调代码执行被阻止,在非异步调用中使用回调是什么?
答案 0 :(得分:4)
同步回调的一些非常常见的例子是Array.prototype
上的方法:forEach
,map
,filter
等。
回调的作用是提供一个可以在更大的算法中轻松交换的部分实现。我想到了一些设计模式,如template method和strategy。
答案 1 :(得分:2)
你是对的。
通常没有理由进行同步回调。
异常包括有时可能是异步的回调,或者可以多次引发的回调(例如,[].map()
)。
答案 2 :(得分:0)
当我使用不想重写的复杂访问方法时,我会以您描述的方式使用回调,并且当我知道组件将在组件不了解的上下文中运行时,我会使用它们,但对开发或使用事件发射器并不特别感兴趣。
我不知道其他人是否发现它们像我一样容易使用。因此,在团队中,我试图了解以您描述的方式使用回调是否有成效。