【发布时间】:2019-09-09 06:20:17
【问题描述】:
我有一个承诺链,它首先收集联系人对象,然后处理收集到的联系人。如何在 Promise.all() 之后将联系人传递给 .then() 部分?
let collectUserDataPromise = []
allUsers.forEach((userId) => {
//Collect all contacts
collectUserDataPromise.push(
dbRoot.child(`users/${userId}`)
.once('value', (userSnapshot)=>{
const userNodeData = userSnapshot.val()
const contactObject = {
alias: (userNodeData.alias) ? userNodeData.alias : '',
name: (userNodeData.name) ? userNodeData.name : '',
status: 'active'
}
console.log('contactObject', contactObject)
//return contactObject
return new Promise((resolve, reject)=> resolve([contactObject]))
})
)
})
Promise.all(collectUserDataPromise)
.then((contactObjects)=>{
console.log('contactObjects', contactObjects)
我的日志显示我已正确收集对象,但我似乎无法将其传递到代码示例中最后一行的 .then() 部分。
.once() 部分的日志
"contactObject { 别名:'Donald',名称:'Donald D',状态:'active'}"
"contactObject { 别名:'Mickey',名称:'Mickey M',状态:'active'}"
.then() 部分的日志
"contactObjects [数据快照{ 节点_: 子节点 { children_:[对象], priorityNode_:[对象], indexMap_:[对象], lazyHash_: null }, 参考: 参考 { 回购:[对象], 路径:[对象], queryParams_:[对象], orderByCalled_: false }, index_: PriorityIndex {} }, 数据快照 { 节点_: 子节点 { children_:[对象], priorityNode_:[对象], indexMap_:[对象], lazyHash_: null }, 参考: 参考 { 回购:[对象], 路径:[对象], queryParams_:[对象], orderByCalled_: false }, index_: PriorityIndex {} }, 数据快照 { 节点_: 子节点 { children_:[对象], priorityNode_:[对象], indexMap_:[对象], lazyHash_: null }, 参考: 参考 { 回购:[对象], 路径:[对象], queryParams_:[对象], orderByCalled_: false }, index_: PriorityIndex {} } ]"
时间戳:“2019-09-08T18:50:40.259Z”
跟踪:“项目/xxxx/xxx”
}"
如何将所有收集到的值从 Promise.all() 传递到 Promise 链的 .then() 部分?
【问题讨论】:
-
我不明白。你在最后记录
then中的对象,问为什么then没有收到它们? -
为什么是
return new Promise((resolve, reject)=> resolve([contactObject]))?为什么不只是return [contactObject]?为什么它是一个数组? -
嗨@rayhatfield!感谢您的答复!你是对的,我不需要传递一个数组,这纯粹是为了测试目的。日志的大部分来自 .then() 部分。我已经更新了我的帖子以澄清。 :) 我通过“return contactObject”得到了相同的结果
标签: javascript firebase firebase-realtime-database promise