【发布时间】:2021-11-09 02:35:03
【问题描述】:
我正在开发 firebase 聊天应用程序,这是第一个函数 insertConversation2,该函数创建了一个包含所有聊天数据的对话数组节点。 现在我想当用户发送消息和代码进入成功块,此时,我想通过函数创建另一个消息节点并传递第一个函数 完成处理程序到第二个函数(finishCreatingConversation)完成处理程序,但问题是它不能正常工作并且没有创建第二个节点。请参阅 firebase 屏幕截图对话节点正在创建但 message-id 未创建请检查代码谢谢。 第一个函数
func insertConversation2(with otherUserEmail: String,name:String,message:Message,completion:@escaping(Bool) -> Void){
let dformatter = DateFormatter()
dformatter.dateFormat = "dd/MM/yyy HH:mm"
let dateToString = dformatter.string(from: Date())
guard let email = UserDefaults.standard.value(forKey: "useremail") as? String else {
return}
var getSafeEmail = getUserEmail(currentEmail: email)
database.child("\(getSafeEmail)").observeSingleEvent(of: .value) { (snapshot) in
//if user is not preens to go to false block else go to furhter
guard var userNode = snapshot.value as? [String:Any] else {
completion(false)
print("user not found in insert time in networking manager")
return
}
var messageData = ""
switch message.kind{
case .text(let messageText):
messageData = messageText
default:break
}
let conversationId = "conversation_\(message.messageId)"
let newConversation:[String:Any] = [
"id":conversationId,
"other_user_email": otherUserEmail,
"name":name,
"latest_message":[
"date":dateToString,
"message":messageData,
"is_read":false
]
]
if var userConversation = userNode["conversation"] as? [[String:Any]]{
//conversation array is exiten append the conversation data
userConversation.append(newConversation)
userNode["conversation"] = userConversation
database.child("\(getSafeEmail)").setValue(userNode) { (error, ref) in
guard error != nil else {return}
self.finishCreatingConversation(conversationId: conversationId, message: message, completion: completion)
//completion(true)
}
}
else{
userNode["conversation"] = [
newConversation
]
database.child("\(getSafeEmail)").setValue(userNode) { (error, ref) in
guard error != nil else {return}
self.finishCreatingConversation(conversationId: conversationId, message: message, completion: completion) //second not working fine
//completion(true) //passing a refrence of completion in above function of insert method
}
}
}
}
第二个功能
func finishCreatingConversation(conversationId:String,message:Message,completion:@escaping(Bool) -> Void){
var messageData = ""
switch message.kind{
case .text(let messageText):
messageData = messageText
}
let dformatter = DateFormatter()
dformatter.dateFormat = "dd/MM/yyy HH:mm"
let dateToString = dformatter.string(from: Date())
guard let email = UserDefaults.standard.value(forKey: "useremail") as? String else {
return}
//var getUserEmail = getUserEmail(currentEmail: email)
let getUserEmailData = getUserEmail(currentEmail: email)
let collectionMessge: [String:Any] = [
"id":message.messageId,
"type":message.kind.messageKindString,
"content":messageData,
"date": dateToString,
"sender_email":getUserEmailData,
"is_read":false
]
database.child("\(conversationId)").setValue(collectionMessge) { (error, ref) in
guard error != nil else {return}
completion(true)
}
}
【问题讨论】: