面向新手的异步 JavaScript
在编写 JavaScript 时,我们经常会遇到异步代码,这对于新手来说可能比较难懂。在深入探讨异步 JavaScript 之前,我们先来简单了解一下同步代码。
什么是同步代码?
同步代码在单线程上运行。一个操作完成后,再转到下一个操作。
thread -
|
V
Start|Line1<---------A--------->|Finish
Start|Line2<---------B--------->|Finish
Start|Line3<---------C--------->|Finish
异步代码
与同步代码不同,异步代码现在运行,稍后完成。
从下图中可以看到,fn2 行尚未完成,而是在 fn6 执行后才完成。
thread - Separate thread outside you code.
| /
V /
Start|fn1<--------A---------->|Finish /
Start|fn2<--------B-----------|-------------|
Start|fn3<--------C---------->|Finish |
Start|fn4<--------D---------->|Finish V
Start|fn5<--------E---------->|Finish |
Start|fn6<--------F---------->|Finish V
Callback |fn2<--------B---------->|<------------|
请注意,JavaScript 是单线程的,只针对你编写的代码,但来自你代码的请求会被交给一个单独的线程处理。比如说一个 API 调用。等等,我知道你在想什么;什么是“回调”?别担心,接下来我们将讨论“回调”。
什么是回调?
回调是一个作为参数传递给另一个函数的函数,然后在输出函数内部调用该函数来完成某种操作。
function Callback(){
alert("You called Me");
}
setTimeout(callback,300);
// You called Me
这是一个同步回调,接下来我们要讨论