【发布时间】:2021-03-06 02:21:12
【问题描述】:
下面的代码将一个文档添加到当前用户的好友集合和目标用户的好友集合中。这部分工作正常,但我在向客户端返回值时遇到问题。我已经确保客户端代码工作正常,但我对 Typescript 的理解还不够好,无法知道我在这里做错了什么。
代码当前的作用:
代码返回69和当前用户的uid。
代码需要做什么:
代码需要根据它结束的位置返回适当的返回值。在 Firebase 控制台中,我看到代码一直执行到 console.log('_addFriend Finished adding friend.') 行。之后的两行分配返回值1 和Friend request sent!,但客户端没有收到这些值。为什么代码不返回这些?
exports.addFriend = functions.https.onCall(async (data, context) => {
console.log('_addFriend: ');
const uid1 = context?.auth?.uid as string //current user
const targetUser = data.targetUser
var username1: string = ''
var returnVal: number = 69
var returnMsg: string = uid1
if (uid1) {
var uid2: string;
const currentUsersFriendsColl = 'friends_' + uid1
await TS_doesUserExist(targetUser)
.then(result => {
if (result[0] == 1) {
console.log('_addFriend: targetUser ', targetUser, ' exists.')
uid2 = result[1]
const targetUsersFriendsColl = 'friends_' + uid2
TS_getUserInfo('uid', uid1, 'username')
.then(getUserInfo_result => {
console.log('_addFriend getUserInfo_result is about to be evaluated')
console.log('_addFriend getUserInfo_result[0]: ', getUserInfo_result[0])
if (getUserInfo_result[0] == 1) {
console.log('_addFriend getUserInfo_result[0]=1')
username1 = getUserInfo_result[1]
//Insert into current user's friends list
const currentUserDoc = admin.firestore().collection(currentUsersFriendsColl).doc();
currentUserDoc.set({
createDate: admin.firestore.FieldValue.serverTimestamp(),
modifiedDate: admin.firestore.FieldValue.serverTimestamp(),
stat: 2, //pending
friendUID: uid2,
friendUsername: targetUser,
})
.then(() => {
console.log('_addFriend: About to insert into target users friends collection')
//Insert into target user's friends list
const friendsDoc = admin.firestore().collection(targetUsersFriendsColl).doc();
friendsDoc.set({
createDate: admin.firestore.FieldValue.serverTimestamp(),
modifiedDate: admin.firestore.FieldValue.serverTimestamp(),
stat: 2, //pending
friendUID: uid1,
friendUsername: username1,
})
.then(() => {
console.log('_addFriend Finished adding friend.')
returnVal = 1
returnMsg = 'Friend request sent!'
})
.catch((error) => {
console.log('_addFriend error adding to target users friends collec: ', error)
returnVal = 0
returnMsg = 'Error all the way inside: ' + error
})
})
.catch(error => {
console.log('_addFriend error: ', error)
returnVal = 0
returnMsg = 'Error1: ' + error
})
} else {
console.log('_addFriend: In else, result was 0.')
returnVal = 0
returnMsg = 'Current user does not exist.'
}
})
.catch(error => {
console.log('_TS_getUserInfo error: ', error)
returnVal = 0
returnMsg = 'Could not find current user info.'
})
} else {
console.log('_TS_doesUserExist: targetUser ', targetUser, ' does not exist.')
returnVal = result[0]
returnMsg = result[2]
}
})
.catch(error => {
console.log('_TS_doesUserExist error: ', error)
returnVal = 0
returnMsg = 'Error2: ' + error
});
}
else {
console.log('_addFriend error: User is not authorized');
returnVal = 0
returnMsg = 'User is not authorized.'
}
return {result: returnVal, message: returnMsg}
});
【问题讨论】:
-
您再次将 async/await 与 then/catch 混合在一起。这绝不是一个好主意。
-
@DougStevenson 两者之间你推荐哪一个?
标签: javascript typescript firebase google-cloud-functions