【问题标题】:Seeking clarification about asynchronous javascript寻求有关异步 javascript 的说明
【发布时间】:2017-02-18 06:29:58
【问题描述】:

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

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

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

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

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

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

谢谢

【问题讨论】:

  • 大部分异步 API 都是浏览器内置的,例如 XMLHTTPRequest(网络 I/O)或事件处理。因为它们是异步的,所以与这些 API 交互的 JavaScript API 必须考虑到这一点。
  • 看看thisjQuery.getJS XMLHttpRequerst 的包装器,异步选项设置为 true。所以它的行为是异步的。
  • JS, Async or Not?!的另一个很好的解释

标签: javascript asynchronous callback


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 2013-05-27
    • 2021-10-31
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多