質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1975閲覧

javascript:forループの待機

T.I

総合スコア17

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/06/01 05:09

javascriptで処理の一時待機(停止)を行いたい。

○処理の内容:
複数ファイルを選択後、各ファイルを500MBサイズに分割して送信。
送信先PHPで保存・結合

javascript

1files = $('#upfile')[0].files; 2 3var sliceSize = 536870912; 4var up_max = files.length; 5 6for (var i=0; i<up_max; i++){ 7 var sliceCnt = 0; 8 if (files[i]["size"] <= sliceSize){ 9 sliceCnt = 1; 10 }else{ 11 sliceCnt = Math.ceil(files[i]["size"] / sliceSize); 12 } 13 for (var j=0; j<sliceCnt; j++){ 14 fileSlice(files[i], files[i]["name"], j, sliceCnt, sliceSize); 15 } 16} 17function fileSlice(file, fileName, i, sliceCnt, sliceSize){ 18 var start = 0, 19 stop = 0; 20 21 start = i * sliceSize; 22 stop = start + sliceSize; 23 24 var reader = new FileReader(); 25 reader.onload = function(evt){ 26 const data = evt.target.result; 27 reader.abort(); 28 }; 29 var blob = file.slice(start, stop); 30 reader.readAsArrayBuffer(blob); 31 $('#progress_wrapper').empty(); 32 $('#progress_wrapper').html('<progress id="progress_area" class="progress_area" value="0" max="100">0%</progress><span id="progress_count" class="progress_count"></span>'); 33 34 upload(blob, fileName, i, sliceCnt-1); 35 sfcFlg = 0; 36} 37function upload(blob, fileName, id, maxId){ 38 $.ajax("upload_test.php",{ 39 xhr: function(){ 40 XHR = $.ajaxSettings.xhr(); 41 if (XHR.upload){ 42 XHR.upload.addEventListener('progress', function(e){ 43 var progre = parseInt(e.loaded / e.total * 10000) / 100; 44 $('#progress_area').val(progre); 45 $('#progress_area').html(progre + '%'); 46 $('#progress_count').html(Math.round(progre) + '%'); 47 }, false); 48 } 49 return XHR; 50 }, 51 type: 'POST', 52 data: blob, 53 cache: false, 54 processData: false, 55 contentType: 'application/octet-stream', 56 dataType: 'jsonp', 57 jsonpCallback: 'callback', 58 headers: { 59 "File-Name": fileName, 60 "Chunk-Id": id, 61 "Chunk-Max-Id": maxId 62 }, 63 success: function(data){ 64 },error: function(data){ 65 } 66 }); 67}

各ファイル毎のアップロード進捗を表示させたいのですが、for文で回しているため
一気に全送信が終了します。
各分割ファイルの送信が完了するまで、処理を待機させる方法を探しています。
どなたか解決方法をお教えください、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Promiseで処理するとかでしょうか?

sample

一応非同期処理を、順番を指定して実行するsampleを付けておきます

javascript

1<script src="https://www.promisejs.org/polyfills/promise-6.1.0.min.js"></script> 2<script> 3var prm=[]; 4for(var i=0;i<10;i++){ 5 prm[i]=function(x){ 6 new Promise(function(resolver){ 7 setTimeout(function(){ 8 console.log(x); 9 return resolver(this); 10 },1000); 11 }).then(function(){ 12 if(x<prm.length){ 13 prm[x](x+1); 14 }else{ 15 console.log("end"); 16 } 17 }); 18 } 19} 20prm[0](1);//実行 21</script> 22

投稿2017/06/01 05:19

編集2017/06/01 06:44
yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

for分を待機させるのではなく
送信後に結合ファイルの完成を
待つ方式にしました。
回答ありがとうございました。

投稿2017/06/12 02:56

T.I

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問