在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

26行JavaScript代码 仿async的 并行执行和序列执行函数

2016-12-20 13:16| 发布者: zhangjf| 查看: 568| 评论: 0

摘要: 代码 !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlns=http://www.w3.org/1999/xhtml xml:lang=en head meta http-eq ...
[HTML]代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  5. <title> </title>
  6. </head>
  7. <body>
  8. <script>
  9. //并行执行
  10. var parall=function(arr,call){
  11. if(!(arr&&arr.length))return;
  12. var endfn=(function(len,call){
  13. var results=[];
  14. return function(data){
  15. results.push(data);
  16. if(results.length==len)call(results);
  17. }
  18. })(arr.length,call);
  19. for(var i=0,item;item=arr[i++];){
  20. item(endfn);
  21. }
  22. }
  23. //序列执行
  24. var sear=function(arr,call){
  25. if(!(arr&&arr.length))return;
  26. var i=0;
  27. !function endfn(data){
  28. if(!arr[i]){
  29. call(data);
  30. return;
  31. }
  32. if(data)arr[i++](data,endfn);
  33. else arr[i++](endfn);
  34. }();
  35. }
  36. //TEST
  37. parall([function(call){
  38. setTimeout(function(){
  39. console.log('one')
  40. call('one');
  41. },1000);
  42. },function(call){
  43. setTimeout(function(){
  44. console.log('two')
  45. call('two');
  46. },1000);
  47. }],function(r){
  48. console.log(r);
  49. })
  50. sear([function(call){
  51. setTimeout(function(){
  52. console.log('one')
  53. call('one');
  54. },1000);
  55. },function(para,call){
  56. setTimeout(function(){
  57. console.log(para+'two')
  58. call(para+'two');
  59. },1000);
  60. }],function(r){
  61. console.log(r);
  62. })
  63. </script>
  64. </body>
  65. </html>
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 18:41

Copyright 2015-2025 djqfx

返回顶部