gpt4 book ai didi

javascript - 为什么我的云函数不能正确返回我的 map ?

转载 作者:行者123 更新时间:2023-12-03 04:49:27 27 4
gpt4 key购买 nike

我有以下功能,我正在尝试将一系列 map 返回到我的Flutter应用

export const usersFromContacts = functions.region('europe-west1').https.onCall(async (data, context) => {
Authentication.authenticate(context);
const phonenumbers = Validator.validateArray<string>('phonenumbers', data['phonenumbers']);

const privateDataPromises = [];
for (let i = 0; i < phonenumbers.length; i++)
privateDataPromises.push(...(await firestore.collectionGroup('userPrivateData')
.where('phonenumber', '==', phonenumbers[i]).get()).docs);
const userSnapshots = await Promise.all(privateDataPromises);

const userPromises = [];
for (let i = 0; i < userSnapshots.length; i++) {
const userID = privateDataPromises[i].id;
userPromises.push(userCollection.doc(userID).get());
}

const returnValue = (await Promise.all(userPromises)).map((document) => UserModel.fromFirestoreDocumentData(document).toMap());
console.log(returnValue);
return returnValue;
});

如果将测试字段记录到云功能控制台,则会获得正确的 map 阵列以及 map 中的正确数据。
[ Map {
'id' => 'ID',
'displayName' => 'Name',
'phoneNumber' => 'Phonenumber',
'photoUrl' => 'PhotoUrl' } ]

这就是我在Firebase功能控制台中得到的。我在哪里替换了c的值。

然后在拍打里面
  Future<HttpsCallableResult> _callCloudFunction(String functionName, {Map<String, dynamic> data}) async {
final cloudFunction = api.getHttpsCallable(functionName: functionName);
try {
final httpCallable = await cloudFunction.call(data).timeout(Duration(seconds: timeout));
print(httpCallable.data); // this prints [{}] an empty array of maps?
return httpCallable;
} on CloudFunctionsException catch (error) {
throw new UserFriendlyException(error.code, error.message);
} on TimeoutException catch (error) {
throw new UserFriendlyException('Operation Failed', error.message);
} catch (error) {
throw new UserFriendlyException('Operation Failed', 'There was a problem with with executing the operation');
}
}

我得到一个空的 map 数组?我究竟做错了什么?

我非常确定调用是正确的,因为如果我直接返回文档,则会将它们放在前端,所以我会以错误的方式从函数中返回值吗?

最佳答案

您正在尝试将ES6 Map对象从函数序列化到客户端。那不会按照您想要的方式工作。

Cloud Functions可调用函数仅支持序列化纯JavaScript对象,数组和原始值。而不是传递Map,而是传递普通的JS对象。这是您必须更改的代码:

UserModel.fromFirestoreDocumentData(document).toMap()

您将必须进入 toMap函数并对其进行更改,或者将其输出转换为常规JS对象以进行序列化。

关于javascript - 为什么我的云函数不能正确返回我的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61653491/

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