我正在尝试将SocketIO包装在Bluebird的承诺中。第一个函数openSocket
接受一些参数,打开套接字,resolve
是connect
事件的承诺。
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就是整个剧本。
修改:更改代码以不改变承诺。在这种情况下,改变承诺不是问题。