net.connect
的版本。如果连接成功,Promise应该返回socket;如果发生连接错误,则应该返回错误。此外最好还要支持可取消性,在取消时能够停止连接尝试。我已经尝试过一次,但是还没有实现可取消性:
function connectAsync() {
var connect_args = arguments;
return new Promise(function (resolve, reject) {
var socket = net.connect.apply(this, connect_args);
socket.once('connect', function () {
socket.removeListener('error', reject);
resolve(socket);
});
socket.once('error', function (err) {
socket.removeListener('connection', resolve);
reject(err);
});
});
}
然而,对于这样简单的事情来说,似乎过于复杂了。有更好的方法吗?有人已经做过这个了吗?
.then(connect()).then(doThing()).then(close())
风格的序列。这似乎是 DB 访问的标准实践,其中db.connect
是被 Promisified 的 - 这甚至在 bluebird 示例中都有展示。为什么net.connect
如此不同呢? - Nakedible