我通過 Rabbitmq 創建了一個佇列系統,并通過套接字向用戶發送通知。基本上有3個檔案。
-index.js //some functions to save data and send to Rabbitmq
-socket.js //socket io modules
-consumer.js //some functions to consume data from Rabbitmq
當 npm run index.js 和 consumer.js 啟動時。
index.js
const Express = require('express');
const app = Express();
//init server
server = app.listen(3000);
//init socket io
require('./socket').initialize(server);
socket.js
const sio = require('socket.io');
let io;
module.exports = {
//Initialize the socket server
initialize: (server) => {
io = sio(server, {
cors: {
origin: '*',
}
});
io.on('connection', (socket) => {
console.log('New client connected with id = ', socket.id);
socket.on('disconnect', () => {
console.log("User disconnected");
});
});
},
//return the io instance
getInstance: () => {
return io;
}
}
消費者.js
const socket = require('./socket');
const io = socket.getInstance();
console.log("io", io);
//io is undefined
Io 在 consumer.js 中回傳 undefined。錯在哪里?
uj5u.com熱心網友回復:
socket.getInstance()在有人socket.initialize()先打電話之前,你不能打電話。
您沒有顯示consumer.js加載位置,因此我們無法遵循模塊加載的完整順序,但它似乎consumer.js在您初始化套接字之前被加載,因此它試圖socket.getInstance()在獲得套接字實體之前呼叫。
當使用回傳從先前方法構建的狀態的方法時,以正確的順序呼叫事物顯然很重要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/408221.html
標籤:
