javascript - 回调作为对象 - 它与 JavaScript 中的异步编程有何关系

标签 javascript multithreading asynchronous callback

我一直在阅读有关回调函数的文章 here ,并了解到JavaScript是一种单线程同步语言。

这意味着,如果您想从数据库收集数据,那么您必须等待例程完成才能执行更多代码。这是真的?如果用户按下按钮来调用同一脚本文件中的不同函数会发生什么?

要使其异步,您可以使用回调。这里的异步意味着回调中的一段代码将在调用之前“等待”事件,但不会创建新线程。

Object 使 JavaScript 回调异步的原因是什么?

这和等待事件一样吗?

最佳答案

确实,对于 Javascript,如果您要调用数据库,通常您必须等待数据库响应(即往返 Pluto ),然后您的代码才能继续执行。这称为“阻塞”调用。

回调允许您执行阻塞调用,但在执行此操作时还要说,“在阻塞调用结束时执行此代码,但不要等待它发生。”因此,您的程序将继续执行。当阻塞调用完成时,您在回调中指定的代码(尚未运行)将执行。这可能几乎立即发生,也可能在一段时间后发生。

使用 Javascript,其余代码将完成执行,然后将执行由阻塞调用完成触发的第一个回调,依此类推,直到执行所有回调。此时线程将被关闭。

请注意,只有回调代码是“等待事件”。

因此,执行顺序如下所示:

  1. 执行一些代码。
  2. 设置回调代码。
  3. 执行阻塞调用。
  4. 执行剩余代码。
  5. 等待阻塞调用返回。
  6. 执行回调代码。
  7. 停止线程进程。

关于javascript - 回调作为对象 - 它与 JavaScript 中的异步编程有何关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799191/

相关文章:

c# - Windows窗体中未处理的非UI线程异常

Java/PriorityQueue 和线程

python - 将简单函数转换为多线程函数

javascript - 隐藏页面直到异步调用返回

javascript - 如何在不在html上添加脚本标签的情况下使用google-maps-api-v3

javascript - forEach 中的内部 Firestore promise 在外部 promise 之后执行

java - 如何实现异步计算?

Android Logback SMTP appender - 无法配置异步发送设置为 false 的 smtp appender

javascript - 无法通过jQuery模拟点击加载窗口

javascript - 带有 AOT 的类型提供者中的 Angular 条件