javascript - 寻求有关异步javascript的澄清

标签 javascript asynchronous callback

我是一名初级 JavaScript 程序员。我一直在尝试理解异步 javascript,但我想弄清楚一些事情。

我知道 javascript 在单线程中运行,您可以使用回调函数使您的代码异步,但我对什么使回调函数异步与否感到困惑。

很多异步回调似乎都遵循这样一种模式,即一个函数的参数是一个特定的 Action ,然后是一个在该 Action 完成时执行的回调函数:

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

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

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

谢谢

最佳答案

它可能是使异步代码异步的几种原因之一:

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

一般来说,setTimeout()setInterval() 是原生 JS 中异步执行的唯一载体(与提供的 DOM、浏览器或其他 API 相对)由特定的运行时)

在您的示例中,jQuery 的 .get() 方法只是浏览器 XMLHTTPRequest API 的包装器,它创建一个新的 XHR 对象,该对象又根据请求的状态发出事件HTTP 请求,并将带有回调的监听器附加到这些事件。

关于javascript - 寻求有关异步javascript的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308234/

相关文章:

javascript - 我应该如何使用 JavaScript 逐步增强此内容?

javascript - 保存当前用户值以在 HTML 中使用

javascript - 试图映射到React

javascript - 检测我网站上的用户不活动

javascript - 如何将我的 javascript 回调流程转换为 Promise?

sql - 异步查询状态功能仅在同一 session 中可用?

asynchronous - Mule ASYNC 范围与 VM

javascript - 我们如何知道所有的异步操作、所有的回调都完成了,并等待它们

javascript - Vue 在从 Meteor 回调获取数据之前选择列表渲染

c++ - Portaudio C++ 绑定(bind) : symbol not found in MemFunCallbackStream