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

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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/
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

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

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。