Firebase APIを使用してHacker Newsストーリーのすべてのコメントを再帰的に取得しようとしています。ストーリーはkids
プロパティを持ちます。これはコメントを表すIDの配列です。各コメントには独自のkids
プロパティがあり、その子コメントを指しています。コメント全体次第お知らせし、その後FireProise.all()のネストされた約束がすべて解決された後
function getItem(id) {
return api
.child(`item/${id}`)
.once('value')
.then((snapshot) => { // this is a Firebase Promise
let val = snapshot.val()
if (val.kids) {
val.replies = val.kids.map((id) => getItem(id))
}
return val
})
}
そして:私は、私は次の関数を使用してこれを行うことが考え
[{
'title': 'comment 1',
'replies': [{
'title': 'comment 1.1'
}, {
'title': 'comment 1.2'
'replies': [{
'title': 'comment 1.2.1'
}]
}]
}]
:私は、全体のコメントツリーの配列を作成するように見える何かをしたいですすべてのO以来、理にかなっている(何が起こって終わることはPromise.all().then()
火災で
getItem(storyId)
.then(story => {
// The story and all of its comments should now be loaded
console.log(story)
})
コメント約束の最初のレベルが解決したら:ツリーは使用してフェッチされていますf commentPromises
が解決しました。)しかし、ネストされた約束がすべて解決されたら、私は知りたいです。これどうやってするの?
'getItem(storyId) 'を呼び出すと' story.kids'というプロパティが 'if(val.kids)'を介して 'getItem()'の内部ですでに処理されていますか?その場合は、 'var commentPromises = story.kids.map(id => getItem(id))'で再度処理する必要がありますか? –
あなたは正しいです。その部分は冗長です。私は私の質問を編集します。 –