SocketIO客户端+ Bluebird在节点

时间:2018-02-05 21:08:06

标签: node.js sockets socket.io promise bluebird

我正在尝试将SocketIO包装在Bluebird的承诺中。第一个函数openSocket接受一些参数,打开套接字,resolveconnect事件的承诺。

function openSocket(options) {
    return new Promise(function(resolve) {
        var socket = io(...);

        socket.once('connect', function() {
            console.log("socket: connected");
            resolve(socket);
        });

    });
}

然后我以同样的方式关闭套接字,resolve disconnect事件。

function closeSocket(socket) {
    return new Promise(function(resolve) {
        socket.once('disconnect', function() {
            console.log("socket: closed");
            resolve();
        });
        socket.close();
    });
}

我有一个简短的承诺链。

openSocket(options)
    .then(closeSocket)
    .then(function() {
        console.log("promise chain done");
    })
;

该程序的行为符合预期,除了它在打印后挂起"承诺链完成"大约一分钟。

strace表示正在调查fd 5,但我不确定原因?

epoll_wait(5, [{EPOLLIN, {u32=12, u64=12}}], 1024, -1) = 1

Here就是整个剧本。

修改:更改代码以不改变承诺。在这种情况下,改变承诺不是问题。

0 个答案:

没有答案