【问题标题】:Socket.IO: "UnhandledPromiseRejectionWarning: Error: Callbacks are not supported when broadcasting"Socket.IO:“UnhandledPromiseRejectionWarning:错误:广播时不支持回调”
【发布时间】:2020-05-18 14:51:50
【问题描述】:

我正在尝试使用 Node.js、Socket.IO 和 MongoDB 创建一个登录系统。 在某一时刻,我必须获得客户端的某个 cookie。 所以我向客户端“发送”一个事件,该事件应该返回 cookie,这样我就可以在同一个函数中处理该数据。 我的代码如下:

服务器:

async function checklogin(user) {
    user = user;
    console.log("user:", user);
    await User.find({username:user}).then(function(docs) {
        servercookieid = docs[0].cookieid;
        servercookiedate = docs[0].cookiedate;
    });
    io.emit('getCookie', function(responseData) {
        console.log(responseData)
    }).catch(error)
}

客户:

socket.on('getCookie', function(callback) {
    console.log('getting cookie...');
    var Cookie = document.cookie;
    callback(Cookie)
});

我真的不知道为什么我会收到这个错误,因为你可以看到我什至没有广播,所以...... /耸肩

如果您需要更多信息,请不要犹豫。

【问题讨论】:

    标签: node.js socket.io callback


    【解决方案1】:

    错误信息说:

    Socket.IO:“UnhandledPromiseRejectionWarning:错误:回调不是 直播时支持” 但事实上,当你做io.emit 时,你就是在广播。

    当前你在执行命令时正在广播:

    io.emit('getCookie', function(responseData) {
        console.log(responseData)
    }).catch(error)
    

    但是对于广播你只需要设置一个参数,它不是一个函数。 只需修复您的代码即可修复错误。 改为:

    io.emit('getCookie', responseData);//must set the cookie
    

    您提供的代码responseData 未定义。但从名字上看,它应该是一个 cookie。

    【讨论】:

    • 我不明白你想告诉我什么。我不想设置 cookie,我想从客户端获取 cookie,然后在同一个函数中进一步使用它。使用您提供的代码,我只需从服务器发送带有任何数据的“getCookie”,但我想发送“getCookie”,然后将数据从客户端返回到服务器
    • 您不能像在socket.on 中那样使用socket.emit。发射时不应放置函数。这是文档。 socket.io/docs/#Sending-and-getting-data-acknowledgements
    猜你喜欢
    • 2017-11-23
    • 2019-03-11
    • 2020-11-05
    • 2018-10-25
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多