导航:首页 > 编程语言 > javascript异步编程的4种方法

javascript异步编程的4种方法

发布时间:2024-06-24 18:00:02

1. javascript同步和异步的区别与实现方式

javascript语言是单线程机制。所谓单线程就是按次序执行,执行完一个任务再执行下一个。

对于浏览器来说,也就是无法在渲染页面的同时执行代码。

单线程机制的优点在于实现起来较为简单,运行环境相对简单。缺点在于,如果中间有任务需要响应时间过长,经常会导致

页面加载错误或者浏览器无响应的状况。这就是所谓的“同步模式”,程序执行顺序与任务排列顺序一致。对于浏览器来说,

同步模式效率较低,耗时长的任务都应该使用异步模式;而在服务器端,异步模式则是唯一的模式,如果采用同步模式个人认为

服务器很快就会出现12306在高峰期的表现。。。。

异步模式的四种方式:

1.回调函数callback

所谓回调函数,就是将函数作为参数传到需要回调的函数内部再执行。

典型的例子就是发送ajax请求。例如:

$.ajax({

async: false,

cache: false,

dataType: 'json',

url: "url",

success: function(data) {

console.log('success');

},

error: function(data) {

console.log('error');

}

})

当发送ajax请求后,等待回应的过程不会堵塞程序运行,耗时的操作相当于延后执行。

回调函数的优点在于简单,容易理解,但是可读性较差,耦合度较高,不易于维护。

2.事件驱动

javascript可以称之为是基于对象的语言,而基于对象的基本特征就是事件驱动(Event-Driven)。

事件驱动,指的是由鼠标和热键的动作引发的一连串的程序操作。

例如,为页面上的某个
$('#btn').onclick(function(){

console.log('click button');

});

绑定事件相当于在元素上进行监听,是否执行注册的事件代码取决于事件是否发生。

优点在于容易理解,一个元素上可以绑定多个事件,有利于实现模块化;但是缺点在于称为事件驱动的模型后,流程不清晰。

3.发布/订阅

发布订阅模式(publish-subscribe pattern)又称为观察者模式(Observer pattern)。

该模式中,有两类对象:观察者和目标对象。目标对象中存在着一份观察者的列表,当目标对象

的状态发生改变时,主动通知观察者,从而建立一种发布/订阅的关系。

jquery有相关的插件,在这不是重点不细说了。。。。回头写个实现贴上来

4.promise模式

promise对象是CommonJS工作组提供的一种规范,用于异步编程的统一接口。

promise对象通常实现一种then的方法,用来在注册状态发生改变时作为对应的回调函数。

promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled)、已完成(resolved)和拒绝(rejected)。以CommonJS
Promise/A
标准为例,promise对象上的then方法负责添加针对已完成和拒绝状态下的处理函数。then方法会返回另一个promise对象,以便于形成promise管道,这种返回promise对象的方式能够支持开发人员把异步操作串联起来,如then(resolvedHandler,
rejectedHandler); 。resolvedHandler
回调函数在promise对象进入完成状态时会触发,并传递结果;rejectedHandler函数会在拒绝状态下调用。

Jquery在1.5的版本中引入了一个新的概念叫Deferred,就是CommonJS promise A标准的一种衍生。可以在jQuery中创建

$.Deferref的对象。同时也对发送ajax请求以及数据类型有了新的修改,参考JQuery API。

除了以上四种,javascript中还可以利用各种函数模拟异步方式,更有诡异的诸如用同步调用异步的case

只能用team里同事形容java和javascript的一句话作为结尾:

“写java像在高速路上开车,写javascript像在草原上开车”-------------以此来形容javascript这种无类型的语言有多自由
but,如果草原上都是坑。

2. 关于generator异步编程的理解以及如何动手写

关于generator异步编程的理解以及如何动手写一个co模块

generator出现之前,想要实现对异步队列中任务的流程控制,大概有这么一下几种方式:

3. 前端的Promise是干啥的

Promise是异步编程的一种解决方案,可以替代传统的解决方案--回调函数和事件。ES6统一了用法,并原生提供了Promise对象。作为对象,Promise有以下两个特点:

(1)对象的状态不受外界影响。

(2)一旦状态改变了就不会在变,也就是说任何时候Promise都只有一种状态。

可以通过Promise的构造函数创建Promise对象。

varpromise=newPromise(function(resolve,reject)setTimeout(function(){
console.log("helloworld");},2000);
});

Promise构造函数接收一个函数作为参数,该函数的两个参数是resolve,reject,它们由JavaScript引擎提供。其中resolve函数的作用是当Promise对象转移到成功,调用resolve并将操作结果作为其参数传递出去;reject函数的作用是单Promise对象的状态变为失败时,将操作报出的错误作为其参数传递出去。如下面的代码:

functiongreet(){varpromise=newPromise(function(resolve,reject){vargreet="helloworld";
resolve(greet);
});returnpromise;
}
greet().then(v=>{console.log(v);//*
})

上面的*行的输出结果就是greet的值,也就是resolve()传递出来的参数。

注意:创建一个Promise对象会立即执行里面的代码,所以为了更好的控制代码的运行时刻,可以将其包含在一个函数中,并将这个Promise作为函数的返回值。

Promise的then方法

  promise的then方法带有以下三个参数:成功回调,失败回调,前进回调,一般情况下只需要实现第一个,后面是可选的。Promise中最为重要的是状态,通过then的状态传递可以实现回调函数链式操作的实现。先执行以下代码:

functiongreet(){varpromise=newPromise(function(resolve,reject){vargreet="helloworld";
resolve(greet);
});returnpromise;
}varp=greet().then(v=>{console.log(v);
})console.log(p);
阅读全文

与javascript异步编程的4种方法相关的资料

热点内容
免鬼 浏览:996
查看电脑命令 浏览:957
amx命令 浏览:385
施乐打印机服务器有什么用 浏览:95
编译64位triangle程序 浏览:627
程序员下午上班怎么样 浏览:403
方块饵压缩机 浏览:517
it项目管理pdf下载 浏览:547
上海私企程序员月工资多少 浏览:859
plc是编程嘛 浏览:250
时政学习用什么app 浏览:969
基于单片机的日历设计方案 浏览:10
手机内存6个文件夹清理 浏览:488
用压缩机改装打气泵 浏览:821
hu0026c什么牌子app 浏览:919
加密软件如何恢复 浏览:478
推特号加密码 浏览:674
我的世界存档成就是什么文件夹 浏览:351
马云讲程序员 浏览:667
用终端命令编译c语言文件 浏览:720