说,有提供了一个connect()
方法,有时可能需要相当长的时间,由于要连接到服务器的库:超时与处置者
var stream = require('stream')
function connect() {
return Promise.delay(Math.random() * 60000)
.return(stream.PassThrough())
.disposer(function(conn) { conn.end() })
}
注意使用disposer()
这确保了连接在使用后关闭。
现在,您处于需要connect()
的情况,但如果无法建立连接,则会在5秒内超时。
所以你想:
Promise.using(connect().timeout(5000), function(conn) {
console.log('Hello world')
})
这显然是行不通的,因为connect()
返回Disposer
。
哦,我只是把超时放在使用块中,你可能天真地想。那么,这样做也行不通,因为一旦建立连接,我们只会进入该块。
所以最后你尝试:
Promise.using(connect(), function(conn) {
console.log('Hello world')
})
.timeout(5000)
这当然,作品。然而,我们没有幸运地有一个简单的console.log
是我们的任务。相反,它看起来更像是:
Promise.using(connect(), function(conn) {
// Do an awfully long task that takes 2 minutes
})
.timeout(5000)
现在超时变得不可再因为相当长的任务,自然需要相当长的时间,造成超时触发每次。
有没有什么办法以某种惯用方式来写这个,不需要改变connect()
来包含超时?
将超时作为参数传递给connect函数。 –
如前所述,我有兴趣解决这个问题,我无法控制'connect()'。 –