Home > database >  Pause function to wait for ajax request inside of a websocket
Pause function to wait for ajax request inside of a websocket

Time:05-19

I have a WebSocket that adds people to a messaged list when they receive a message. I use a fetch to get information from the server to build the messaged list, but I cannot find an easy way to get the code to pause until the fetch completes. I cannot add await because the funciton is inside a websocket that isn't async. Does anyone have any suggestions on this?

        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;
            }
        });

CodePudding user response:

Actually You can add async function in socket.on

socket.on('receive_message',async function(data) {

  • Related