my problem is in order of execution: the connectToNewUser function, which is called inside wait() function, get executed before the myPeer.on('call'), which is also inside it. I put my code into async\await function, but no result, somehow "user-connected" executes first. If I add timeout to connectToNewUser
socket.on('user-connected', userId => {
    setTimeout(connectToNewUser,1000,userId,stream)
  })
, it start to work as I need, but I want to solve it using await. Where is a problem?
 const socket = io("/");
const videoGrid = document.getElementById("video-grid");
const myPeer = new Peer(undefined, {
    host: "/",
    port: "3001"
});
const myVideo = document.createElement('video');
myVideo.muted = true;
const peers = {};
navigator.mediaDevices.getUserMedia({
    video: true,
    audio: true
}).then(stream => {
    addVideoStream(myVideo, stream);
    wait(myPeer, stream);
});
socket.on("user-disconnected", userId => {
    peers[userId] && peers[userId].close();
});
myPeer.on("open", id => {
    socket.emit("join-room", ROOM_ID, id);
})
const connectToNewUser = (userId, stream) => {
    const call = myPeer.call(userId, stream);
    const video = document.createElement('video');
    
    call.on("stream", userVideoStream => {
        addVideoStream(video, userVideoStream);
    });
    call.on("close", () => {
        video.remove();
    });
    peers[userId] = call
}
const addVideoStream = (video, stream) => {
    video.srcObject = stream;
    video.addEventListener('loadedmetadata', () => {
        video.play();
    })
    videoGrid.append(video);
} 
async function wait(myPeer, stream) {
    await myPeer.on("call", call => {
        call.answer(stream);
        const video = document.createElement("video");
        call.on("stream", userVideoStream => {
            addVideoStream(video, userVideoStream)
        })
    });
    await socket.on("user-connected", userId => {
        connectToNewUser(userId, stream);
    });
}
 
     
    