了解异步函数调用

时间:2017-10-22 15:25:32

标签: javascript asynchronous callback stack que

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

在异步JS的例子中,我看到异步逻辑总是在同步逻辑之后被调用,也就是说最后。类似的东西:

function1() {}

asynchronousFunction(){}

function2(){}

这不等于:

function1(){}

function2(){}

function3(){} //asynchronous function

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

感谢您提供任何帮助!

3 个答案:

答案 0 :(得分:1)

JS中的异步函数用于执行需要时间的事情,例如:下载一些数据或计算某些东西。你可以同步地完成它,但是你的视图会冻结,没有人想要它。

异步功能在所有同步后运行并不是真的。 (它从正常的同步功能开始,但在完成“任务”时结束。

更多:Link

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

答案 1 :(得分:0)

Javascript async函数以同步函数开头,但与常规函数的不同之处不同。

Javascript是单线程 - 也就是说,它一次只能关注一件事。它通过promises来弥补这一点,foo是构建异步函数的主要概念。当一个异步函数被调用时,它会创建一个承诺,它只是说,“嘿,我会在promises完成之后再调用它。”所以,你的异步函数在移动到下一个函数之前完成,但不同之处在于它现在才知道它需要稍后再回来。

看起来你的异步函数总是在所有同步函数之后完成的原因是因为它确实如此。在当前的代码运行之后总是调用Promise,因为Javascript只能在单个线程上运行。

您可以详细了解d = val while d > 9: d = sum(int(c) for c in str(d)) here

答案 2 :(得分:0)

同步呼叫逐行发生。当调用并执行其先前的函数时,将调用同步行。

javascript中的异步调用会在调用之前等待某些事件发生。如果发生特定事件,它会安排将来调用的方法。

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

阅读more

这可以通过名为事件循环。

的东西实现

请考虑以下代码段。

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

输出

1
3
2

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