标签:插件 message 写法 tps 控制 dao event nbsp final
异步操作
程序里面所有的任务,可以分成两类:同步任务(synchronous)和异步任务(asynchronous)
JavaScript 运行时,除了一个正在运行的主线程,引擎还提供一个任务队列(task queue),
里面是各种需要当前程序处理的异步任务。(实际上,根据异步任务的类型,存在多个任务队列。为了方便理解,这里假设只存在一个队列。)
f1
和f2
,编程的意图是f2
必须等到f1
执行完成,才能执行
function f1() { // ... } function f2() { // ... } f1(); f2();
上面代码的问题在于,如果f1
是异步操作,f2
会立即执行,不会等到f1
结束再执行
f1
,把f2
写成f1
的回调函数
function f1(callback) { // ... callback(); } function f2() { // ... } f1(f2);
f1.on(‘done‘, f2); // 当 f1 发生 done 事件,就执行 f2
对f1
进行改写:
function f1() { setTimeout(function () { // ... f1.trigger(‘done‘); // 表示,执行完成后,立即触发done
事件,从而开始执行f2
}, 1000); }
jQuery.subscribe(‘done‘, f2);
function f1() { setTimeout(function () { // ... jQuery.publish(‘done‘); }, 1000); }
f1 执行完成后,向信号中心 jQuery 发布 done 信号,从而引发 f2 的执行
jQuery.unsubscribe(‘done‘, f2);
var items = [ 1, 2, 3, 4, 5, 6 ]; var results = []; function async(arg, callback) { console.log(‘参数为 ‘ + arg +‘ , 1秒后返回结果‘); setTimeout(function () { callback(arg * 2); }, 1000); } function final(value) { console.log(‘完成: ‘, value); } function series(item) { if(item) { async( item, function(result) { results.push(result); return series(items.shift()); }); } else { return final(results[results.length - 1]); } } series(items.shift());
var items = [ 1, 2, 3, 4, 5, 6 ]; var results = []; function async(arg, callback) { console.log(‘参数为 ‘ + arg +‘ , 1秒后返回结果‘); setTimeout(function () { callback(arg * 2); }, 1000); } function final(value) { console.log(‘完成: ‘, value); } items.forEach(function(item) { async(item, function(result){ results.push(result); if(results.length === items.length) { final(results[results.length - 1]); } }) });
(82)Wangdao.com第十六天1017__ JavaScript 异步操作
标签:插件 message 写法 tps 控制 dao event nbsp final
原文地址:https://www.cnblogs.com/tianxiaxuange/p/9807263.html