JavaScript异步编程1.3.3 缓存型异步函数_JavaScript异步编程1.3.3 缓存型异步函数试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > JavaScript异步编程 > 1.3.3 缓存型异步函数

JavaScript异步编程——1.3.3 缓存型异步函数

间或异步的函数有一个常见变种是可缓存结果的异步请求类函数。举例来说,假设正在编写一个基于浏览器的计算器,它使用了网页Worker对象以单独开一个线程来进行计算。(第5章将介绍网页Worker对象的API。)主脚本看起来像这样: var calculationCache = {}, calculationCallbacks = {}, mathWorker = new Worker('calculator.js'); mathWorker.addEventListener('message', function(e) { var message = e.data; calculationCache[message.formula] = message.result; calculationCallbacks[message.formula](message.result); }); function runCalculation(formula, callback) { if (formula in calculationCache) { return callback(calculationCache[formula]); }; if (formula in calculationCallbacks) { return setTimeout(function() { runCalculation(formula, callback); }, 0); }; mathWorker.postMessage(formula); calculationCallbacks[formula] = callback; } 在这里,当结果已经缓存时,runCalculation函数是同步的,否则就是异步的。存在3种可能的情景。 公式已经计算完成,于是结果位于calculationCache中。这种情况下,runCalculation是同步的。 公式已经发送给Worker对象,但尚未收到结果。这种情况下,runCalculation设定了一个延时以便再次调用自身;重复这一过程直到结果位于calculationCache中为止。 公式尚未发送给Worker对象。这种情况下,将会从Worker对象的'message'事件监听器激活回调。 请注意,在第2种和第3种情景中,我们按照两种不同的方式来等待任务的完成。这个例子写成这样,就是为了演示依据哪几种常见方式来等待某些东西发生改变(如缓存型计算公式的值)。是不是应该倾向于其中某种方式呢?我们接着往下看。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《JavaScript异步编程》其他试读目录

• 第1章:深入理解JavaScript事件
• 1.1.1 现在还是将来运行
• 1.1.2 线程的阻塞
• 1.1.3 队列
• 1.2 异步函数的类型
• 1.2.1 异步的I/O函数
• 1.2.2 异步的计时函数
• 1.3 异步函数的编写
• 1.3.1 何时称函数为异步的
• 1.3.2 间或异步的函数
• 1.3.3 缓存型异步函数 [当前]
• 1.3.4 异步递归与回调存储
• 1.3.5 返值与回调的混搭
• 1.4 异步错误的处理
• 1.4.1 回调内抛出的错误
• 1.4.2 未捕获异常的处理
• 1.4.3 抛出还是不抛出
• 1.5 嵌套式回调的解嵌套
• 1.6 小结