【发布时间】:2021-05-26 16:57:43
【问题描述】:
我的问题在于执行顺序:在 wait() 函数内部调用的 connectToNewUser 函数在 myPeer.on(' call'),也在里面。我将我的代码放入 async\await 函数中,但没有结果,以某种方式首先执行 "user-connected"。如果我向 connectToNewUser
添加超时socket.on('user-connected', userId => {
setTimeout(connectToNewUser,1000,userId,stream)
})
,它开始按我的需要工作,但我想用 await 解决它。哪里出了问题?
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);
});
}
【问题讨论】:
-
这是javascript吗?如果是这样,那么我会说这将是一个重要的添加标签。
-
你需要用 Promise 包装
myPeer.on('call')并在回调中解决它。 -
不工作。举个例子好吗?