gpt4 book ai didi

javascript - 使用 Firebase 数据库的嵌套 Promise 函数

转载 作者:行者123 更新时间:2023-11-30 14:19:36 26 4
gpt4 key购买 nike

我有以下函数,它接受一个参数(“名称”数组),然后根据该数组检查来 self 的 firebase 数据库的每个用户的数据。

它使用它为每个用户及其电子邮件编译一组“设置”,并将用户与列表共享的名称作为参数输入。该函数如下所示。

fbDaemon = ({ folderNames }) => {
const settings = [];
ref.once("value")
.then((snapshot) => {
snapshot.forEach(user => {
auth.getUser(user.key)
.then(function(userRecord) {
let email = userRecord.toJSON().email;
let zips = [];

user.forEach(setting => {
let dep = setting.val().department;
if(folderNames.includes(dep)){
zips.push(dep);
}
});

settings.push({ email, zips });
})
.catch(function(error) {
console.log("Error fetching user data:", error);
});
});
});
});

本质上,它遍历我的整个数据库并编译我将传递给下一个函数的设置列表。最终结果应如下所示:

[ { email: 'example@example1.com',
zips: [ 'Drug Enforcement Administration', 'Executive Branch' ] },
{ email: 'example@example2.com',
zips: [ 'FEMA', 'Congress' ] },
];

我现在遇到的问题是我无法在适当的时候返回“设置”数组。

我如何重新配置​​此函数,以便仅在整个函数运行时才返回设置数组?

换句话说,我想用设置数组返回一个已解决的 promise 。我该怎么做?

最佳答案

也许您可以在此处使用 Promise.all() 来解决 promise 数组(其中数组中的每个项目都对应于对该项目的 getUser 调用/用户)?

所以,按照这些思路:

fbDaemon = ({ folderNames, folderPaths }) => {
const settings = [];

return ref.once("value")
.then((snapshot) => {

// Collect all users from snapshot into an array
const users = []
snapshot.forEach(user => { users.push(user) })

// Create promise for each user, and use Promise.all to
// resolve when each "user promise" is complete
return Promise.all(users.map(user => {

// Be sure to add "return" here
return auth.getUser(user.key)
.then(function(userRecord) {
let email = userRecord.toJSON().email;
let zips = [];

user.forEach(setting => {
let dep = setting.val().department;
if(folderNames.includes(dep)){
zips.push(dep);
}
});

settings.push({ email, zips });
})
.catch(function(error) {
console.log("Error fetching user data:", error);
})
}));
}).then(function() {

return settings;
});
};

关于javascript - 使用 Firebase 数据库的嵌套 Promise 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com