异步函数这个术语有点名不副实:调用一个函数时,程序只在该函数返回之后才能继续。JavaScript写手如果称一个函数为“异步的”,其意思是这个函数会导致将来再运行另一个函数,后者取自于事件队列(若后面这个函数是作为参数传递给前者的,则称其为回调函数,简称为回调)。于是,一个取用回调的异步函数永远都能通过以下测试。 var functionHasReturned = false; asyncFunction(function() { console.assert(functionHasReturned); }); functionHasReturned = true; 异步函数还涉及另一个术语,即非阻塞。非阻塞这个词强调了异步函数的高速度:异步MySQL数据库驱动程序做一个查询可能要花上一小时,但负责发送查询请求的那个函数却能以微秒级速度返回。这对于那些需要快速处理海量请求的网站服务器来说,绝对是个福音。 通常,那些取用回调的函数都会将其作为自己的最后一个参数。(可惜的是,老资格的setTimeout和setInterval都是这一约定的特例。)不过,有些异步函数也会间接取用回调,它们会返回Promise对象或使用PubSub模式。本书稍后就会介绍这些异步设计模式。 遗憾的是,要想确认某个函数异步与否,唯一的方法就是审查其源代码。有些同步函数却拥有看起来像是异步的API,这或者是因为它们将来可能会变成异步的,又或者是因为回调这种形式能方便地返回多个参数。一旦存疑,请别指望函数就是异步的。
JavaScript异步编程——1.3.1 何时称函数为异步的
书名: JavaScript异步编程
作者: [英] Trevor Burnham
出版社: 人民邮电出版社
原作名: Async JavaScript: Build More Responsive Apps with Less Code
副标题: 设计快速响应的网络应用
译者: 许青松
出版年: 2013-6
页数: 118
定价: 32.00元
装帧: 平装
丛书: 图灵程序设计丛书
ISBN: 9787115316578