gpt4 book ai didi

javascript - 在这种情况下,如何使用 Firebase Cloud Functions 避免 promise 嵌套?

转载 作者:行者123 更新时间:2023-12-01 01:13:58 24 4
gpt4 key购买 nike

我有一个 Android 应用程序,它将电话号码列表发送到我项目中的云功能。然后,服务器应该检索用户所有电话号码的列表,获取两个数组之间的交集(相同元素),然后将交集数组中用户的 Firebase Auth 用户 ID 发送回应用程序。

这就是我的想法:-

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();

const auth = admin.auth();
const _ = require('underscore');

exports.getUids = functions.https.onCall((data, context) => {
return auth.listUsers().then(userRecords => {
var allPhoneNumbers = [];
userRecords.users.forEach(user => allPhoneNumbers.push(user.phoneNumber));
var phoneNumbers = _.intersection(allPhoneNumbers, data);
var Uids = [];
//the next line is where I am nesting promises
phoneNumbers.forEach(phoneNumber => auth.getUserByPhoneNumber(phoneNumber).then(user => Uids.push(user.uid)));
return Uids;
}).catch(error => console.error(error));
});

我从来没有用 JavaScript 编程过,但我正在尝试。已经过去两天了,我只是不知道如何解决这个问题。我尝试过至少10种不同的方法。我发现 promise 真的很难处理。如有任何帮助,我们将不胜感激。

最佳答案

您可以使用Promise.all以避免这个问题。请注意,对 getUserByPhoneNumber 的调用不会等待完成。你必须链接 Promise 才能等待它。这是一个带有常规 Promise 的实现:

return auth
.listUsers()
.then(userRecords => {
var allPhoneNumbers = [];
userRecords.users.forEach(user => allPhoneNumbers.push(user.phoneNumber));
var phoneNumbers = _.intersection(allPhoneNumbers, data);

return Promise.all(
phoneNumbers.map(phoneNumber => auth.getUserByPhoneNumber(phoneNumber))
);
})
.then(users => {
return users.map(user => user.uid);
})
.catch(error => {
console.error(error);
});

这是一个异步/等待的实现:

return auth
.listUsers()
.then(async userRecords => {
var allPhoneNumbers = [];
userRecords.users.forEach(user => allPhoneNumbers.push(user.phoneNumber));
var phoneNumbers = _.intersection(allPhoneNumbers, data);

const users = await Promise.all(
phoneNumbers.map(phoneNumber => auth.getUserByPhoneNumber(phoneNumber))
);

return users.map(user => user.uid);
})
.catch(error => {
console.error(error);
});

关于javascript - 在这种情况下,如何使用 Firebase Cloud Functions 避免 promise 嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54925269/

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