以下、配列の値をローカル変数に代入しようとしています。私はその値を取得する配列を返す関数を呼び出しています。問題は、2番目の関数のPromises
が、配列が呼び出し元に返されるまで解決されないということです。私はretArray
にPromise.all()
を使用しようとしましたが、それは私のために決して働きません。私がconsole.log()
私のsomeobject
オブジェクトの場合、SkywalkerTitles()
への呼び出しが空の配列を返すので、arrOfTitles
フィールドは決して印刷されません。Promise.all()を使用して関数内に構築されている配列を返すのを延期するにはどうすればよいですか?
コードhereを実行できます。
someObject.arrOfTitles
タイトルの配列を取得するにはどうすればSkywalkerTitles()
?
function SkywalkerTitles(){
let retArray = [];
fetch('https://swapi.co/api/people/')
.then(function(response){
response.json()
.then(function(result){
return result.results[0];
})
.then(function(result){
result.films.forEach(function(film){
fetch(film)
.then(function(response){
response.json().then(function(result){
console.log(result.title);
retArray.push(result.title);
});
});
})
.catch(function(error){
console.log(error)
});
});
})
.catch(function(error){
console.log(error)
});
}
function UseReturnedArray() {
let someObject = { aThing: '', anotherThing: '', arrOfTitles: null };
someObject.aThing = 'Thing One';
someObject.anotherThing = 'Thing Two';
someObject.arrOfTitles = SkywalkerTitles();
console.log('Object With Returned Array:\n\n', JSON.stringify(someObject, null, 2));
}
UseReturnedArray();
の使用に比べて平坦化された方法のみシングルキャッチ、ほとんどの場合、これまで必要
注意あなたがまだやっていない関数から約束を返せば、 'SkywalkerTitles()。then(result => someObject.arrOfTitles = result)'のようになります。 [非同期呼び出しからの応答を返すにはどうすればいいですか?](https://stackoverflow.com/q/14220321/218196) –
'SkywalkerTitles'は何も返さないので、 someObject.arrOfTitles'は 'undefined'になります。また、' SkywalkerTitles'は非同期コンポーネントを持っているので、 'someObject.arrOfTitles'はこれまでと同じことが可能な唯一のものは約束オブジェクトです –