寻求关于异步javascript的澄清

时间:2017-02-17 22:08:35

标签: javascript asynchronous callback

我是一名javascript程序员。我一直试图理解异步javascript,但我想澄清一些事情。

我知道javascript在单个线程中运行,并且您可以使用回调函数使您的代码异步,但我对使回调函数异步或不同步的原因感到困惑。

许多异步回调似乎遵循一种模式,其中函数将某个操作作为其参数,然后执行该操作完成后执行的回调函数:

jQuery.get('page.html', function (data) {
    console.log("second");
});
console.log('first');

具体是什么使得参数中的回调在以后执行?这里的get方法是预先定义为某种特殊方法(因为它获取文件),如果将函数作为第二个参数传递,它会以异步方式运行吗?

如何使您自己编写的函数异步?

由于

1 个答案:

答案 0 :(得分:1)

这可能是使异步代码异步的几件事之一:

  • 计时器事件(即setTimeout()setInterval(),每个都接受回调函数作为它们稍后执行的参数)
  • DOM事件(即将带有回调函数的事件监听器附加到HTML元素或其他DOM节点,在这种情况下,在该事件触发时执行回调函数)
  • 浏览器提供的其他API(即XMLHTTPRequest,根据浏览器本身的内容发布事件)
  • 在Node.js或类似的服务器端环境中,任何直接访问磁盘或网络等资源的I / O库

一般来说,setTimeout()setInterval()是本机JS中异步执行的唯一工具(与特定运行时提供的DOM,浏览器或其他API相对)

对于您的示例,jQuery的.get()方法只是浏览器的XMLHTTPRequest API的包装器,它创建了一个新的XHR对象,该对象依次发出基于事件的事件关于HTTP请求的状态,并将具有回调的侦听器附加到这些事件。