2017-02-24 10 views
0
const tileApiPromises = []; 
response.data.forEach((tile) => { 
    return getPartnerToken(tile.id).then((response) => { 
     tileApiPromises.push(getTileContent(tile, response)); 
    }); 
}); 
console.log(tileApiPromises) // should give me an array of promises 
Promise.all(tileApiPromises) // The goal is to execute this. 

もちろん、ログに空の配列があります。 forEachの外で約束した配列を取得するにはどうすればいいですか?ご協力いただきありがとうございます!forEachループの後で配列を埋めるにはどうすればいいですか

+0

私はマップとしようとしたとき、私は未定義の約束値を取得します。 :/ – user3651940

答えて

1

コードの問題は、プッシュが非同期で行われることです。したがって、配列にはまだ何もありません!

あなたはマップを試してみました(コメント内) - このように試しましたか?

const tileApiPromises = response.data.map((tile) => { 
    return getPartnerToken(tile.id).then((response) => { 
     return getTileContent(tile, response); 
    }); 
}); 

や、セクシー

const tileApiPromises = response.data.map(tile => 
    getPartnerToken(tile.id).then(response => getTileContent(tile, response)) 
); 
+0

あなたのコードは私のものよりもセクシーです。 :D – user3651940

0

forEachの代わりにArray.map関数を使用できます。

forEachは常にundefinedを返します。

map関数は、指定された配列を繰り返し処理し、map関数で提供されるコールバックで返された値の累積配列を返します。

マップ機能に関する素晴らしいドキュメントです。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map

+0

私は.mapを使ってみましたが、console.log(tileApiPromises)のときはpromiseValueが未定義になりました。私はマップを使ってこれをどのようにすることができるかの例を教えてもらえますか? – user3651940

+0

@ user3651940 - あなたは答えたところで@ Yaromanda Xとして –

+0

というマップを試してみるべきです。コールバックで値を返そうとしましたか? – lavish

関連する問題