了解异步函数调用



我刚刚开始学习异步JavaScript,所以我不确定这是否是一个愚蠢的问题,但我无法直接找到答案。

在异步JS的示例中,我看到异步逻辑总是在同步逻辑之后调用,也就是说最后一个。像这样:

function1() {}
asynchronousFunction(){}
function2(){}

这不等同于:

function1(){}
function2(){}
function3(){} //asynchronous function
异步调用不是

与主线程堆栈顶部的函数调用相同吗,因为异步调用似乎总是在任何同步之后进行?

感谢您对此的任何帮助!

JS中的异步函数用于执行需要时间的操作,例如下载一些数据或计算某些内容。当然,你可以同步进行,但你的视图会冻结,没有人想要这样。

异步函数在所有同步后运行是不正确的。(它像正常的同步功能一样开始,但在"任务"完成时结束。

更多: 链接

您还应该阅读有关 AJAX 的更多信息。

Javascript async函数最初是一个同步函数,但在如何解决方面与常规函数不同。

Javascript 是单线程的,也就是说,它一次只能专注于一件事。它通过具有 promises 来弥补这一点,这是构建异步函数的主要概念。当调用异步函数时,它会创建一个承诺,它只是说,"嘿,一旦foo完成,我将稍后回调它。因此,异步函数在移动到下一个函数之前确实完成了,但不同之处在于它现在只知道它稍后需要返回。

异步函数似乎总是在所有同步函数之后完成的原因是,嗯,它确实如此。承诺总是在当前代码运行之后调用,因为同样,Javascript 只能在单个线程上运行。

您可以在此处阅读有关promises的更多信息。

同步调用逐行发生。当同步行的先前函数全部调用和执行时,将调用同步行。

javascript 中的异步调用在调用之前等待某个事件发生。它计划将来在特定事件发生时调用的方法。

请注意,异步与并发或多线程的含义不同。JavaScript 可以有异步代码,但它通常是单线程的。

阅读更多

这是通过称为事件循环的东西实现的。

请考虑以下代码片段。

console.log("1");
setTimeout(() => {
 console.log("2");
},0);
console.log("3");

输出为

1
3
2

这是因为第 2 行是异步方法调用。此方法被添加到称为事件循环的队列中,然后在将来计时器结束时或调用堆栈为空时取消排队。

相关内容

  • 没有找到相关文章

最新更新