尽管在控制台上有值,但React不会从firebase渲染数组值,并且数组的长度为0

时间:2018-06-15 13:14:12

标签: javascript reactjs firebase firebase-realtime-database promise

我正在尝试从firebase获取数据并将数据逐个推送到数组中。但是,React组件上没有显示所获取数据的数组。

我控制台登录后发现,如下图所示,console.log(array.length)为0,但console.log(array.length)显示数组的内容。

enter image description here

代码如下。

# First replace `, ` with `|` in dt$Synonyms. Now dt$Synonyms can be
# used 'pattern' argument of `gsub`.
dt$Synonyms <- paste("\\b",gsub(", ","\\\\b|\\\\b",dt$Synonyms),"\\b", sep = "")

# Loop through each row of 'dt' to replace Synonyms with word using sapply
mydf$sentence <- sapply(mydf$sentence, function(x){
  for(row in 1:nrow(dt)){
    x = gsub(dt$Synonyms[row],dt$Word[row], x)
  }
  x
})

mydf
#                  sentence
# 1     I can Use this file
# 2 I can Hide these things

我怀疑这是由于滥用Promise所以console.log显示了值,但React组件没有显示任何内容。但是我也怀疑React方面并且找不到问题的确切位置。

如果您对此问题提出任何线索,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

您不是在等待嵌套的承诺来解决。您可以使用Promise.all来完成任务。

const getThreadList = (id) => {
  return db.ref(`users/${id}/friends`).once('value')
  .then((snapshot)=>{
    let friends = snapshot.val()
    const threads = []
    for(let key in friends){
      if(friends.hasOwnProperty(key)) {
        threads.push(getThread(friends[key].threadID))
      }
    }
    return Promise.all(threads)
  })
}

或使用Object.values

const getThreadList = id => {
  return db
    .ref(`users/${id}/friends`)
    .once("value")
    .then(snapshot => {
      const loadingThreads = Object.values(snapshot.val()).map(friend =>
        getThread(friend.threadID)
      );
      return Promise.all(loadingThreads);
    });
};