文档章节

将来和未来

gtandsn
 gtandsn
发布于 2017/03/31 15:56
字数 680
阅读 5
收藏 0

异步编程的核心:  程序中现在运行的部分和将来运行的部分之间的关系。

var data = ajax( "http://some.url.1" );
console.log( data );

增加回调,虽然可以同步ajax请求,但是一定不要这样做,因为他会锁定一切

解决办法
ajax( "http://some.url.1", function myCallbackFunction(data){
console.log( data ); 
} );

分离以下代码的现在和将来执行部分

function now() {
return 21;
}
function later() {
answer = answer * 2;
console.log( "Meaning of life:", answer );
}
var answer = now();
setTimeout( later, 1000 ); // Meaning of life: 42

 

现在:
function now() {
return 21;
}
function later() { .. }
var answer = now();
setTimeout( later, 1000 );
将来:
answer = answer * 2;
console.log( "Meaning of life:", answer );

 

 

千万不要在异步中使用同步的这种想法,因为会锁定一切。

 

事件循环

// eventLoop是一个用作队列的数组
// (先进,先出)
var eventLoop = [ ];
var event;
// “永远”执行
while (true) {
// 一次tick
if (eventLoop.length > 0) {
// 拿到队列中的下一个事件
event = eventLoop.shift();
// 现在,执行下一个事件
try {
event();
}
catch (err) {
reportError(err);

}

}

 

并行线程

并行计算最常见的工具就是进程和线程。进程和线程独立运行,并可能同时运行:在不同
的处理器,甚至不同的计算机上,但多个线程能够共享单个进程的内存

JavaScript 从不跨线程共享数据

 

理解以下代码:

var a = 20;
function foo() {
a = a + 1;
}
function bar() {
a = a * 2;
}

ajax( "http://some.url.1", foo );
ajax( "http://some.url.2", bar );

 

并发:

并发合作方式:

1、非交互

两个或多个“进程”在同一个程序内并发地交替运行它们的步骤/ 事件时,如果这些任务
彼此不相关,就不一定需要交互。如果进程间没有相互影响的话,不确定性是完全可以接
受的。
举例来说:
var res = {};
function foo(results) {
res.foo = results;
}
function bar(results) {
res.bar = results;
}

ajax( "http://some.url.1", foo );
ajax( "http://some.url.2", bar );

 

2、交互

  var res = [];
function response(data) {
res.push( data );
}

ajax( "http://some.url.1", response );
ajax( "http://some.url.2", response );

以下是改进

var res = [];
function response(data) {
if (data.url == "http://some.url.1") {
res[0] = data;
}
else if (data.url == "http://some.url.2") {
res[1] = data;
}
}

ajax( "http://some.url.1", response );
ajax( "http://some.url.2", response );

 

再来一代码

var a, b;
function foo(x) {

a = x * 2;
baz();
}
function bar(y) {
b = y * 2;
baz();
}
function baz() {
console.log(a + b);
}

ajax( "http://some.url.1", foo );
ajax( "http://some.url.2", bar );

改进:

var a, b;
function foo(x) {
a = x * 2;
if (a && b) {
baz();
}
}
function bar(y) {
b = y * 2;
if (a && b) {
baz();
}
}
function baz() {
console.log( a + b );
}

ajax( "http://some.url.1", foo );
ajax( "http://some.url.2", bar );

 

3、协作

    var res = [];
function response(data) {
res = res.concat(
data.map( function(val){
return val * 2;
} )
);
}
ajax( "http://some.url.1", response );
ajax( "http://some.url.2", response );

改进:

var res = [];
function response(data) {
var chunk = data.splice( 0, 1000 );
res = res.concat(
chunk.map( function(val){
return val * 2;
} )
);
if (data.length > 0) {
setTimeout( function(){
response( data );
}, 0 );
}
}
ajax( "http://some.url.1", response );
ajax( "http://some.url.2", response );

处理异步的方法:

1.回调函数    

© 著作权归作者所有

共有 人打赏支持
下一篇: Array.form
gtandsn
粉丝 0
博文 67
码字总数 31926
作品 0
成都
私信 提问
关于学习 | 这是我听过最好的回答!

孩子,我为什么要求你读书? 那天我问你,“你将来想做什么”,我注意到,你很不屑于回答我这个问题,所以跟我胡诌一通。是因为你们这个世代的人,对未来太自信,所以不屑与像我这一代人年轻...

一个敲代码的前端妹子
2018/01/23
0
0
联想服务器:双品牌运作,或走向融合

整合System x之后,联想已经初步构建了包括服务器、存储、网络在内的数据中心版图。服务器产品线极大丰富,从低端的单路、到高端四路/八路、刀片、融合基础架构Flex System、到整机柜服务器、...

cougarboy
2017/11/22
0
0
Opera 展望未来五年的浏览器

据国外媒体报道,Opera首席标准官Charles McCathieNevile接受O'Reilly网站编辑Mac Slocum的采访,采访内容主要关于网络浏览器的未来以及平板电脑及移动电话等硬件设备。 以下是采访的内容: ...

红薯
2010/04/26
562
2
公民机器人索菲亚亮相多伦多:未来你们要当心

近日,史上首位获得“人类公民身份”的机器人索菲亚亮相加拿大多伦多“Discovery”创新成就展。索菲亚表示,目前我们机器人还无法做到人类能做到的某些事情,但未来你们可要当心了。索菲亚的...

环球科技
2018/05/02
0
0
智能居家生活:使用ipad控制一切!

在加利福尼亚州的帕洛阿尔托市,“日落杂志”正在进行未来家居的设计,这个未来家居设计理念旨在突出高科技,环保且能源效率高, 智能家居的所有自动化系统全部是通过安装有iOS系统的设备来访...

非我莫属
2011/11/16
433
5

没有更多内容

加载失败,请刷新页面

加载更多

ShxViewer_SHX字体查看

ShxViewe 是一款非常实用的SHX字型浏览软件。从CAD里面的字体浏览软件分离出来,帮助我们预览shx字体。 程序长这个样子: 分别打开txt.shx、hztxt.shx、ltypeshp.shx这几个形文件,可以了解一...

一个小妞
26分钟前
1
0
Jenkins的初步使用

Jenkins真是个宝藏软件,今天大概安装使用了一下,感觉还有好多维度可以探索。 1)安装:在Windows上使用的,在https://jenkins.io/download/下载Windows安装包,解压后是一个msi文件,默认安...

莫在全
38分钟前
1
0
技术复习-分布式事务

一、分布式事务解决方案 1.两阶段提交 two phase commit 角色分为协调者、参与者。协调者负责协调所有的参与者。 第一阶段 prepare 协调者发送prepare请求,参与者锁定资源之后返回ready或者...

Lubby
48分钟前
2
0
jenkins安装

https://my.oschina.net/u/593517/blog/1797968 jenkins 安装 https://my.oschina.net/u/593517/blog/3028175 GIT 安装 https://my.oschina.net/u/593517/blog/3028179 maven 安装 插件安装 ......

Gm_ning
58分钟前
2
0
小言服务端解决方案-监控

框架保证方向,整体包容细节 为保证服务端运行平稳正常,owner应使得系统应保有相应的监控:系统监控,业务监控。而服务运行的平稳高效是否有保障跟监控粒度又成直接的正比关系。本文仅针对开...

重城重楼
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部