【javascript】promise.allを使わずにpromiseだけで並行してファイルをダウンロードします.

9191 ワード

アーカイブ
promise運営メカニズムを迅速に整理し、実際のアプリケーションとPromiseを利用して大量ファイルのシリアルダウンロード問題を解決します.promise.allはpromiseだけを使ってファイルを並列にダウンロードします.手書きPromiseの前に知っておくべきいくつかの例【一】手書きPromiseの前に知っておく必要があるいくつかの例【二】手書きPromise+標準を超えます.
背景
  • 上記の文章を続けてPromiseを利用して大量のファイルのシリアルダウンロード問題を解決します.王立先生は並行してダウンロードしていますが、promise.allのテーマは使わないです.
  • コードの実装
    let n = 5,fileli=[];
    for(let i = 0;i<n;i++){
        fileli.push(`    ${i}`);
    }
    let retry=5;
    //        ,         ,  promise       ,       Promise,          。
    function mystack(i,myvalue){
        return  new Promise(function(resolve,reject){
            setTimeout(() => {
                if(myvalue==='    2'){
                    if(i>retry)return;
                    console.log('    '+myvalue+'    '+i)
                    let res=[i+1,myvalue];
                    reject(res)
                }else{
                    console.log(myvalue+'    ')
                    resolve()
                }
            }, 1000);
        })
    }
    let myfileli=fileli.map(function(value,index){
        return function(i){
            return mystack(i,value)
        }
    })
    function downloadfail(res){//      
        mystack(res[0],res[1]).then(res=>console.log('    '),res=>{downloadfail(res)})
    }
    myfileli.forEach(function(value,index){//index       
        let i =1;
        value(i,fileli[index]).then(res=>console.log('    '),res=>downloadfail(res))
    })
    
    ファイルデータ0はファイルデータをダウンロードしています.1ダウンロード失敗ファイルデータをダウンロードしています.2再試行回数3ダウンロード失敗ファイルデータ2再試行回数4ダウンロード失敗ファイルデータをダウンロードしてダウンロードしました.2ダウンロードしました.5