我有一個 WebSocket,可以在人們收到訊息時將他們添加到訊息串列中。我使用 fetch 從服務器獲取資訊以構建訊息串列,但我找不到一種簡單的方法來讓代碼暫停直到 fetch 完成。我無法添加等待,因為該功能位于非異步的 websocket 中。有人對此有什么建議嗎?
socket.on('receive_message', function(data) {
let messaged_user_li = document.getElementById('messaged_user_li' data['from_user']);
console.log('messaged_user_li: ' messaged_user_li)
if (messaged_user_li == null) {
console.log('if fired')
//THIS is the fetch I want to pause the function until complete. Note that the await here does not work since the funciton isn't async.
await fetch('/get_messaged_user/' from_user).then((response) => {
response.json().then((data2) => {
loadMessagedUser(data2[0].id, data2[0].avatar, data2[0].username, data2[0].last_seen);
});
});
messaged_user_li = document.getElementById('messaged_user_li' data['from_user']);
}
console.log('messaged_user_li: ' messaged_user_li)
let message_user = document.getElementById('message_user' data['from_user']);
let message_target = document.getElementById("message_target" data['from_user']);
if (messaged_user_li.classList.contains('active') == false) {
messaged_user_li.classList.add('flash-message');
}
if (message_user != null) {
data = `
<li >
<div >
<span >just now</span>
</div>
<div >` data['message'] `</div>
</li>`;
message_target.innerHTML = data;
//Move scroller to bottom when message received
myDiv = message_user.querySelector(".chat-history");
myDiv.scrollTop = myDiv.scrollHeight;
}
});
uj5u.com熱心網友回復:
其實你可以在 socket.on 中添加異步功能
socket.on('receive_message',async function(data) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478134.html
標籤:javascript 阿贾克斯 异步等待
