Javascript 如何用不同的方法将数据发送到套接字?
我想使用socket.io将数据发送到两个不同的组件,现在第一个emit可以工作,但第二个甚至没有激活,我尝试在io.on函数中反转它们的顺序,只有第一个写入的可以工作。第二个正在等待第一个发射结束吗?如何使它们并行工作 这是我的代码:Javascript 如何用不同的方法将数据发送到套接字?,javascript,websocket,socket.io,Javascript,Websocket,Socket.io,我想使用socket.io将数据发送到两个不同的组件,现在第一个emit可以工作,但第二个甚至没有激活,我尝试在io.on函数中反转它们的顺序,只有第一个写入的可以工作。第二个正在等待第一个发射结束吗?如何使它们并行工作 这是我的代码: import {createServer} from "http"; import socketIo from "socket.io"; import express from "express"; i
import {createServer} from "http";
import socketIo from "socket.io";
import express from "express";
import cors from "cors";
import mongoose from "mongoose";
import { MONGODB_URL } from "./config/config";
import jwt from "jsonwebtoken";
import { watchLeaves } from "./database/controllers/LeaveControllers";
import { watchCalendars } from "./database/controllers/calendarControllers";
const port = process.env.PORT || 3333;
mongoose.connect(MONGODB_URL, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", () => {
console.log("Connected to database");
});
const app = express();
app.use(cors());
app.get("/", (req, res) => {
res.send({ response: "I am a websocket!" }).status(200);
});
const verifySocketAuth = (header) => new Promise((resolve, reject) => {
if (typeof header !== "undefined") {
const headerArray = header.split(" ")
const token = headerArray[1]
return jwt.verify(token, "Bearer", (err, auth) => {
if (err) reject(new Error(err))
else resolve(auth)
})
}
})
const server = createServer(app);
const io = socketIo(server, {
cors: {
origin: "*",
methods: ["GET", "POST"],
}
});
io.use(async (socket, next) => {
const header = socket.handshake.headers["authorization"];
await verifySocketAuth(header)
console.log("token", await verifySocketAuth(header))
next()
});
const getLeavesAndEmit = async (socket) => {
const lastRecord = await watchLeaves();
socket.emit("FromLeaves", lastRecord);
};
const getCalendarsAndEmit = async (socket) => {
const lastRecord = await watchCalendars();
console.log("last record calendars==>", lastRecord);
socket.emit("FromCalendars", lastRecord);
};
io.on("connection", async (socket) => {
console.log("Client connected");
await getLeavesAndEmit(socket);
await getCalendarsAndEmit(socket);
socket.on("disconnect", () => {
console.log("Client disconnected");
});
});
server.listen(port, () => console.log(`Soket Server listening on ${port}`));
我猜,
socket.emit
不会返回承诺,所以当你等待getLeavesAndEmit(socket)时,你正在等待一些永远无法解决的问题。在socket.emit
之后,尝试从异步函数返回一些静态的东西,比如返回“done”
我猜socket.emit
不会返回承诺,所以当您执行等待getLeavesAndEmit(socket)
时,您正在等待一些永远无法解决的东西?在socket.emit之后
尝试从异步函数返回一些静态值,比如返回“完成”
@JeremyThille omg谢谢!!!它起作用了:DOh nice:)那是在黑暗中拍摄的。我已将其作为答案发布,因此您可以将其标记为已接受。