主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

JavaScript: 非同期処理をfor loopとjQuery.Deferredで直列処理する(Deferred with for loop)

                
tags: JavaScript
 前回にjQuery.Deferredを使って複数の非同期処理をそれぞれの終了を待って順番に行った。
jQuery.Deferredで非同期処理を書く
 配列filesに入れられたファイルを関数showImageで順番に処理するようにとコールバックがごちゃごちゃと回されるように書かれていたところを、わりと素直なfor文で置き換えることができた。
if (files.length) {
var str = "showImage(files[0])()";
for (var i = 1, f; f = files[i]; i++) {
str += ".then(showImage(f))";
}
eval(str);
}

コールバックの置き換えは済んだが、とりあえず動くものを作ろうと単純な使い方を真似しようとした結果、実行する式を文字列で作っておいてevalで実行する形を取った。Deferredオブジェクトをforループごとにthenでつなぐのはどうやればいいかわからかったので。そこらがもうちょい調べて試行してevalを取っ払うことができた。
var d = (new $.Deferred()).resolve();
for (var i = 0, f; f = files[i]; i++) {
d = d.then(showImage(f));
}


おまけサンプル
http://jsfiddle.net/hiroaki/v2ok8rhd/1/
            

コメントの投稿

非公開コメント

プロフィール

h

Author:h

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon