javascript - 如何将值从 Promise.all 传递给 .then()?
问题描述
我有一个承诺链,它首先收集联系人对象,然后处理收集到的联系人。如何在 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 [DataSnapshot { node_: ChildrenNode { children_: [Object], priorityNode_: [Object], indexMap_: [Object], lazyHash_: null }, ref_: Reference { repo: [Object], path: [Object], queryParams_: [对象], orderByCalled_: false }, index_: PriorityIndex {} }, DataSnapshot { node_: ChildrenNode { children_: [Object], priorityNode_: [Object], indexMap_: [Object], lazyHash_: null }, ref_: Reference { repo : [对象], 路径: [对象], queryParams_: [对象], orderByCalled_: false }, index_: PriorityIndex {} }, DataSnapshot { node_: ChildrenNode { children_: [Object], priorityNode_: [Object],indexMap_: [Object],lazyHash_: null }, ref_: 参考 { repo: [Object], path: [Object], queryParams_: [Object], orderByCalled_: false }, index_: PriorityIndex {} } ]"
时间戳:“2019-09-08T18:50:40.259Z”
跟踪:“项目/xxxx/xxx”
}”
如何将所有收集到的值从 Promise.all() 传递到 Promise 链的 .then() 部分?
解决方案
看起来dbRoot.child('...').once('...')
您的代码部分本质上是您要存储在collectUserDataPromise
数组中的 Promise。这意味着您不需要像您所做的那样创建自己的 Promise(return new Promise
等)。
尝试以下方法,让我知道它有帮助:
let collectUserDataPromise = [];
allUsers.forEach(userId => {
//Collect all contacts
collectUserDataPromise.push(
dbRoot
.child(`users/${userId}`)
.once("value")
.then(userSnapshot => {
const userNodeData = userSnapshot.val();
const contactObject = {
alias: userNodeData.alias ? userNodeData.alias : "",
name: userNodeData.name ? userNodeData.name : "",
status: "active"
};
//return contactObject
return contactObject;
})
);
});
Promise.all(collectUserDataPromise).then(contactObjects => {
console.log("contactObjects", contactObjects);
});
推荐阅读
- php - 注意:未定义变量:zendframework 3 中的 pic
- node.js - 管道传输到流式变压器时不会触发结束事件
- python - Python:clustermap Seaborn 的算法
- c# - Func 的最佳实践
和功能 - android - 谷歌地图在片段活动中的自我许可错误
- c - 将本机数据类型初始化为“零”的一般操作
- jhipster - NoSuchBeanDefinition: ConfigurableEnvironment
- c# - 在运行时 c# (uwp) 上将图像添加到资产
- mysql - How to implement this query in laravel?
- java - How to count the total number of duplicated chars in a string using nested loop?