gpt4 book ai didi

javascript - 在发送到后端时显示数据

转载 作者:行者123 更新时间:2023-12-03 00:33:11 24 4
gpt4 key购买 nike

我正在尝试解决用户体验问题。

我正在使用 Ionic、Angular 和 Firebase 构建一个聊天应用。

我遇到的问题是,当用户发送消息时,该消息仅在成功发送到服务器后才会出现。

因此,这意味着,如果您的连接速度较慢,则在成功发送第一条消息之前,您将无法键入下一条消息。

这是我的简化 HTML:

//For viewing messages
<div *ngFor="let message of messageFeed; let in = index">
<div class="messageCont">
<div class="messageBubble"
[ngClass]="{'fromMe': message.uid == userData.uid, 'fromYou': message.uid != userData.uid}">
{{message.text}}
</div>
</div>

</div>

//For sending messages
<div>
<ion-item>
<ion-textarea id="replyTextarea" [(ngModel)]="messageText" autocorrect="on" maxlength="450" (input)='charCount($event.target, false)' placeholder="Write something nice..."></ion-textarea>
</ion-item>
<button type="button" id="postReplyBtn" (tap)="sendMessage()" class="glowBtn white" ion-button outline>Send</button>
</div>

这是我的 JS:

sendMessage() {
let date = new Date().getTime();
let messageKey = firebase.database().ref().push().key;
let messageData = {
text: this.msg,
uid: this.userData.uid,
recipient: this.recipient,
created: date,
messageId: messageKey,
};
this.database.list('threads/' + this.threadId + '/messages').set(messageKey, messageData).then(() => {
console.log("Message Sent!")
this.messageText = "";
this.content.scrollToBottom(100);
this.messageFeed.push(messageData)
}, function(error) {
console.log(error)
});
}

因此,正如您所看到的,当消息发送成功时,messageText 会被清除,messageFeed 仅当消息发送成功时才会获取新项目。发送成功。

但我想要的是,一旦单击“发送”,messageFeed 就会获取一个项目,然后在实际发送该项目时需要将其删除。因为在 ngOnInit() 中我有这样的代码:

getChatMsg() {
this.getChat = this.database.database.ref('/threads/' + this.threadId + '/messages/')
.orderByChild('created')
.limitToLast(25);
this.getChat.on('child_added', (snapshot) => {
this.messageFeed.push(snapshot.val());

});
}

加载最新消息。

这有道理吗?如何在消息仍在发送时在 messageFeed 中显示消息,以便用户可以在服务器接收消息时发送任意数量的消息...

最佳答案

set() 操作已异步完成,但只有在服务器确认完成后才会调用其 then() 回调。由于您希望尽快清除输入,因此应该将该代码移出 then() 回调。

所以类似:

this.database.list('threads/' + this.threadId + '/messages').set(messageKey, messageData).then(() => {
console.log("Message committed on server")
}, function(error) {
console.log(error)
});
console.log("Message Sent!")
this.messageText = "";
this.content.scrollToBottom(100);
this.messageFeed.push(messageData)

关于javascript - 在发送到后端时显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53770496/

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