JavaScript 中的异步模式【APICloud教程】
发布在APICloud移动应用开发平台2015年8月7日view:1931
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

APICloud 提供的大部分 API 都是异步的,对于刚刚接触 JavaScript 的同学,常常会对 这种异步模式感到困惑。下面通过一个简单的小例子来谈谈这个问题。 先来看看下面的代码。

var online = false;
online = true;
alert(online);
复制代码

很明显,上面的 alert(online) 会弹出 "true"。 我们将 online = true; 放到 setTimeout 函数中

var online = false;

// 一秒钟后执行
setTimeout(function(){
    online = true;
}, 1000);

alert(online);
复制代码

此时 alert(online) 会弹出 "false"。为什么? 原因是 setTimeout 将 online = true; 变成了异步的。 setTimeout 执行后,紧随其后的 alert(online); 会立即执行,而此时 online = true; 这行代码还没有执行。 那一定要确保 alert(online); 为 "true" 的话,应该怎么做呢? 答案是使用回调函数。我们来将上面的代码改造一下:

doSomething(function(online) {
    alert(online);
});

function doSomething(callback) {
    // 一秒钟后执行
    setTimeout(function() {
        var online = true;
        // 如果 callback 存在,则执行 callback
        callback && callback(online);        
    }, 1000);
}

复制代码

这样一来,即使是异步模式,我们也可以获得正确的结果。

【补充知识】 同步和异步的区别
Javascript 语言的执行环境是"单线程"的。在“单线程”环境下,多个任务必须按照顺序一个一个的执行。
如果其中一个任务的耗时很长,其他任务就只能等待,浏览器的整个页面会处于一种阻塞的状态。 为了解决这个问题,JavaScript 才将任务的执行环境分成了同步和异步模式两种:
"同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的;"异步模式"则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

以上的描述可能有些不好理解。那我们来换一个更加通俗的例子。
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

原文链接:http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=11066

评论
发表评论
暂无评论
WRITTEN BY
PUBLISHED IN
APICloud移动应用开发平台
  • 7天开发APP,重新定义移动应用开发。
  • 可以帮助开发者快速实现移动应用的开发、测试、发布、管理和运营的全生命周期管理。
  • 云API:减少70%服务器端编码工作量,同时提供推送、云修复、大数据分析等服务。
  • 端API:“积木拼装”式的开发跨平台APP,为APP开发者提供大量优质的原生模块,涵盖UI、系统、交互、影音、支付等类型的原生模块。
  • 模块store:“模块Store”通过提供“1+1”的服务(一站式+一键集成),让APP开发以及第三方服务SDK的集成变得非常简单,可以像逛超市一样在APICloud“模块Store”挑选自己中意的第三方服务,只需在线一键绑定,就可以实现不同服务的快速集成。
  • 官方网站:www.apicloud.com

我的收藏