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

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

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

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

Q&A

解決済

2回答

1413閲覧

ループの中でajax

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2017/04/07 10:58

編集2017/04/07 11:02

#ループの中でajaxをして、取得したデータでオブジェクトを書き換えて、最終的に書き換えたオブジェクトを使用したいです。

##こんな感じ

javascript

1obj = {a:{色々入っている},b:{色々入っている}}; 2obj.map((data)=>{ 3 // getObでサーバーからデータを受け取り, 4 // {色々入っているにcを追加} 5 getOb(data.id).then((info)=>{ 6 {色々入っている}.c = info; 7 }); 8}); 9// hogeでobj.cを使用したい 10hoge(obj);

##以下はやってみたけどダメでした

javascript

1// やってみたけどダメだった処理 2// hogeでobj{色々入っている}の中身を見ると、cが追加されていない 3// getOb.then()の中で見るとcは追加されていたので、 4// hogeが実行されるときはcが追加されていない模様 5let p = Promise.resolve(); 6obj.map((data)=>{ 7 p = p.then( 8 getOb(data.id).then((info)=>{ 9 {色々入っている}.c = info; 10 }) 11 ); 12}); 13 14p.then(hoge(obj));

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

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

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

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

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

guest

回答2

0

ベストアンサー

Promise.all とかどうでしょう。

JavaScript

1let obj = { arr: [] }; 2const files = [ './a.txt', './b.txt', './c.txt' ]; 3function readFileAsync( file ) { 4 const rand = Math.floor( Math.random() * 4 ) + 2 ; 5 return new Promise( ( resolve, reject )=> { 6 setTimeout( _=> { 7 if ( rand > 4 ) { // 模擬errがあればrejectを呼び出す 8 reject( file + ' / ' + rand + ': false' ); 9 return; 10 } 11 resolve( file + ' / ' + rand + ': true' ); // 模擬errがなければ成功とみなしresolveを呼び出す 12 }, 100 * rand ); 13 } ); 14} 15Promise.all( files.map( file => { 16 return readFileAsync(file); 17 } ) ) 18 .then( results => { // 結果は配列にまとまって帰ってくる 19 console.log( results ); 20 results.forEach( res => { 21 obj.arr.push( res ); 22 } ); 23 console.log( obj ); 24 return obj; 25 } ) 26 .catch( err => { // どれか一つでも失敗すれば呼ばれる 27 console.log( 'Error!: ' + err ); 28 } ) 29 ; 30```**動くサンプル:**[https://jsfiddle.net/08ry84ca/](https://jsfiddle.net/08ry84ca/) 31 32--- 33 34【今更だけどPromise入門 - Qiita】 35[http://qiita.com/koki_cheese/items/c559da338a3d307c9d88](http://qiita.com/koki_cheese/items/c559da338a3d307c9d88)

投稿2017/04/08 20:20

kei344

総合スコア69364

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

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

退会済みユーザー

退会済みユーザー

2017/04/09 06:44

やっぱりallを使用するしかなさそうですね。 回答ありがとうございました。
guest

0

データの受け渡しがどうなっているかわかりませんが
データをまとめてajaxで渡して、まとめて返してもらったうえで
オブジェクトに当てはめていく案件ではないですか?

投稿2017/04/07 11:38

yambejp

総合スコア114572

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

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

退会済みユーザー

退会済みユーザー

2017/04/09 06:42

コメントありがとうございます。 ajaxで受け取ったデータに編集を加えて内部で使用する案件です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問