- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个react.js 组件,我打算在其中按顺序从firebase 中的两个不同节点提取数据。这是代码。但它不起作用:
async componentDidMount() {
const publisherID = this.props.match.params.id;
const that = this;
const soundcasts = [];
const publisher = await firebase.database().ref('publishers/' + publisherID).once('value');
const soundcastsArr = Object.keys(publisher.val().soundcasts);
console.log('soundcastsArr: ', soundcastsArr);
let soundcast;
for(let i = 0; i < soundcastsArr.length; i++) {
console.log('for block called');
soundcast = await firebase.database().ref(`soundcasts/${soundcastsArr[i]}`).once('value');
console.log('soundcast: ', soundcast.val());
console.log('i: ', i);
}
}
我可以看到soundcastsArr
的console.log ,第一个 console.log('for block called');
,但不是其余的。循环似乎在 soundcast = await firebase.database().ref(
行停止执行soundcasts/${soundcastsArr[i]} ).once('value');
并且没有显示错误。
这就是事情变得更奇怪的地方。如果我再添加一个await
在 for 循环内部从其他节点检索数据,然后从 soundcasts
检索数据节点,如下所示:
for(let i = 0; i < soundcastsArr.length; i++) {
console.log('for block called');
const user = await firebase.database().ref(`users/reionviorfruinjkd343fsk`).once('value');
console.log('user: ', user.val());
soundcast = await firebase.database().ref(`soundcasts/${soundcastsArr[i]}`).once('value');
console.log('soundcast: ', soundcast.val());
console.log('i: ', i);
}
它使一切正常工作,我得到了每个 console.log
显示。
这对我来说似乎很奇怪。
任何 firebase 专家都可以解释一下吗?
<小时/>更新:现在可以使用了。原来是await
在 for 循环中确实有效。但无论出于何种原因,从该特定节点检索数据都需要很长时间。因此,在组件继续执行其他功能之前,我没有看到任何 console.log。在组件中添加了加载指示器。现在一切都渲染得很好。
最佳答案
您错误地理解了 promise 数组的概念。首先构建 Promise 数组,然后在该数组上使用 Promise.all 。不要等待
每个单独的。
const soundcastPromises = soundcastsArr.map((soundcast) => {
return firebase.database().ref(`soundcasts/${soundcastsArr[i]}`).once('value')
})
const resolvedSoundcasts = await Promise.all(soundcastPromises)
这是为了修复您对 Promise.all
的使用。我不确定您的查询为何挂起。
关于javascript - 使用 async/await 从 firebase 数据库顺序检索数据不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48144182/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!