异步执行和同步执行

什么是异步执行?

同步执行

代码是一系列指令,它们按顺序运行。

在代码的正常执行期间,代码中的一个函数可能会调用另一个函数

在调用另一个函数的时候,被调用的函数开始运行,原代码则被暂时搁置一旁。

当被调用的函数执行完成后,它会返回我们的原始代码和返回值

我们的原始代码恢复执行,并可以使用该返回值做一些事情。我们将此称为同步执行

异步执行

与上述相反的,还有一些在原代码正常执行之外运行的代码,我们将这种代码的执行方式称为异步执行

因为异步执行意味着代码将不是一步一步运行,整个代码的每一步将可能不会仅仅只执行一个指令;或者说异步代码的指令通常与我们其他代码的指令同时运行(并且完全分开)。这段代码在它自己的快乐世界中做事,并且最终是否返回结果也不一定,因此它可能会导致程序出现问题。

例如

假设我们在网站上运行的 JavaScript 需要来自服务器的数据,那么这个时候我们需要调用一个”向服务器发送请求“以”获取数据“的函数。这个请求可能需要一些时间才能到达服务器并返回我们的网站。与此同时,我们的 JavaScript 的其余部分继续运行。过来一会儿,请求到了服务器,又经过一段时间,函数返回了我们需要的数据。但是我们的 JavaScript 的其余部分本身并没有停下来等返回的数据,原本就还在继续运行,那我们就没有办法简单的将这些数据恢复到我们的原始代码中。

这时候我们需要做什么?

想办法将数据返回到原始代码中来处理它吗?

不,我们只需要告诉异步函数在完成时要做什么。

在 JavaScript 中,这通常看起来像将回调函数作为参数传递。

var do_something_cool = function (result) {
    console.log(result);
};

var original_function = function () {
    // You can define a function inline.
    other_function(function (result) {
        // this is called by function_that_does_something_asynchronous
        do_something_cool(result);
    });
};

var original_function = function () {
    // You can also pass a function by reference.
    // This will do the exact same thing as the example above.
    other_function(do_something_cool);
};

var original_function = function () {
    // But this would not work. Don't do this.
    var result = other_function();
    do_something_cool(result);
};

如果您选择提供回调,异步函数的文档应该告诉您可以期望回调函数接收哪些类型的数据。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值