ryanking8215
2014-06-06 17:21:56 +08:00
你好,问题就在这里,如果要发送N次,我就要在代码里写N次的Q.timeout(send(msg))。
现在我解决这个问题了,用递归。
一开始思路错了,想着让Q来解决问题,现在碰到超时,就用递归再调用send(msg)就好了,控制递归的结束条件,恩,如下所示:
function send(msg,timeout,defer){
if (timeout>4000) {
defer.reject(new Error("Timeout"))
return
}
// 如果超时了,就继续发送
var id = setTimeout(function({
self.send(msg,timeout*2,defer) // 超时后send again
}),timeout)
// 以下是发送和接收消息,要么defer.resolve(),要么defer.resolve()
}
function sendMsg(msg) {
var defer = Q.defer()
this.send(msg,500,defer)
return defer.promise
}