【javascript】promise.allを使わずにpromiseだけで並行してファイルをダウンロードします.
9191 ワード
アーカイブ
promise運営メカニズムを迅速に整理し、実際のアプリケーションとPromiseを利用して大量ファイルのシリアルダウンロード問題を解決します.promise.allはpromiseだけを使ってファイルを並列にダウンロードします.手書きPromiseの前に知っておくべきいくつかの例【一】手書きPromiseの前に知っておく必要があるいくつかの例【二】手書きPromise+標準を超えます.
背景上記の文章を続けてPromiseを利用して大量のファイルのシリアルダウンロード問題を解決します.王立先生は並行してダウンロードしていますが、promise.allのテーマは使わないです. コードの実装
promise運営メカニズムを迅速に整理し、実際のアプリケーションとPromiseを利用して大量ファイルのシリアルダウンロード問題を解決します.promise.allはpromiseだけを使ってファイルを並列にダウンロードします.手書きPromiseの前に知っておくべきいくつかの例【一】手書きPromiseの前に知っておく必要があるいくつかの例【二】手書きPromise+標準を超えます.
背景
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