26行JavaScript代碼 仿async的 并行執行和序列執行函數

oofw5751 8年前發布 | 803 次閱讀 JavaScript Android開發 app 上架

[HTML]代碼    

<!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-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title> </title>
</head>
<body>
    <script>

   //并行執行
    var parall=function(arr,call){
        if(!(arr&&arr.length))return;
        var endfn=(function(len,call){
            var results=[];
            return function(data){
                results.push(data);
                if(results.length==len)call(results);
            }
        })(arr.length,call);
        for(var i=0,item;item=arr[i++];){
            item(endfn);
        }
    }
    //序列執行
    var sear=function(arr,call){
        if(!(arr&&arr.length))return;
        var i=0;
        !function endfn(data){
            if(!arr[i]){
                call(data);
                return;
            }
            if(data)arr[i++](data,endfn);
            else arr[i++](endfn);
        }();    
    }


    //TEST  
    parall([function(call){
        setTimeout(function(){
            console.log('one')
            call('one');
        },1000);
    },function(call){
        setTimeout(function(){
            console.log('two')
            call('two');
        },1000);
    }],function(r){
        console.log(r);
    })

    sear([function(call){
        setTimeout(function(){
            console.log('one')
            call('one');
        },1000);
    },function(para,call){
        setTimeout(function(){
            console.log(para+'two')
            call(para+'two');
        },1000);
    }],function(r){
        console.log(r);
    })
    </script>
</body>
</html>
 本文由用戶 oofw5751 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!