【发布时间】:2019-08-31 13:31:05
【问题描述】:
我正在尝试了解如何在给定的数组循环中实现 Promise 和 Promise.All 的基础知识,例如,从可以在循环中执行任意数量的操作的 firebase 查询中,然后我可以访问到后来的结果。我似乎无法获得正确的语法和逻辑。下面是一个示例方法,我想延迟将一些项目插入数组,然后在循环后访问数组进行处理。
我在 Stackoverflow 上研究了不同的方法。有些人分配了一个 promises = snap.forEach 循环,然后在完成后以某种方式解决这个问题。其他人正在循环内创建一个承诺。在下面的示例中,我只是使用 settimeout 来延迟/创建异步进程。
testfirebaseData = () => {
let channels =[];
var promises=[];
firebase.database().ref('challengeResponses').child(day).once('value', snap => {
snap.forEach(channelChild => {
promises.push(new Promise((resolve) => {
setTimeout(() => {
channels.push(channelChild.key);
resolve(channels)
},1000)
})
)
})
}).then (() => {
Promise.all(promises).then(() => {
console.log(channels[0])
})
}
}
我希望上面的输出显示“通道”数组中的第一个元素,但它总是以“未定义”返回......因为我显然没有正确处理承诺。我错过了什么?
【问题讨论】:
-
你能分享一个简单的例子吗?我试过设置 promises = fiirebase.database() ...但也无法让它工作。我需要在回调中解决吗?
标签: javascript firebase promise