axios promiseライブラリを使用していますが、私の質問はより一般的に当てはまります。今、私はいくつかのデータをループして、反復ごとに単一のREST呼び出しを行っています。
各呼び出しが完了すると、オブジェクトに戻り値を追加する必要があります。高レベルでは、次のようになります。
var mainObject = {};
myArrayOfData.forEach(function(singleElement){
myUrl = singleElement.webAddress;
axios.get(myUrl)
.then(function(response) {
mainObject[response.identifier] = response.value;
});
});
console.log(convertToStringValue(mainObject));
もちろん、私がconsole.log
mainObject
にはまだデータがありません。axiosがまだアクセスしているからです。この状況に対処する良い方法は何ですか?
Axiosにはall
メソッドと姉妹spread
メソッドがありますが、事前にいくつの呼び出しを行うかがわかっている場合に役立つように見えますが、私の場合はループの繰り返しがいくつあるかわかりません。
すべてのプロミスを配列に収集し、axios.all
を使用する必要があります。
var mainObject = {},
promises = [];
myArrayOfData.forEach(function(singleElement){
myUrl = singleElement.webAddress;
promises.Push(axios.get(myUrl))
});
axios.all(promises).then(function(results) {
results.forEach(function(response) {
mainObject[response.identifier] = response.value;
})
});
console.log(convertToStringValue(mainObject));
axios docs で説明されています