我正在尝试从firebase获取数据并将数据逐个推送到数组中。但是,React组件上没有显示所获取数据的数组。
我控制台登录后发现,如下图所示,console.log(array.length)为0,但console.log(array.length)显示数组的内容。
代码如下。
# 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方面并且找不到问题的确切位置。
如果您对此问题提出任何线索,我们将不胜感激。
答案 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);
});
};