让promise p实现类似于HTTP请求的基于时间的逻辑,即。如果它等待的时间少于5秒且已获得结果,则解析否则以超时拒绝。我想在事件中将它用作包装器,所以无论是否有任何进入,无论如何都应该解决这个问题。虽然以下代码段似乎有效,但我不确定它是否已正确实现:
let p = new Promise(function(resolve, reject) {
evt.on('dataStream', stream => {
if(stream.payload) {
let payload = stream.payload;
resolve(stream)
}
})
setTimeout( () => {
reject('Timeout!')
}, 5000)
});
p.then(res => console.log(res))
.catch(err => console.log(err))
答案 0 :(得分:0)
虽然以下代码段似乎有用,但我不确定它是否已正确实现:
我同意你的代码是正确的。
此外,如果您event
有承诺,我也会找到类似的方式。
// Rough implementation. Untested.
function timeout(ms, promise) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error("timeout"))
}, ms)
promise.then(resolve, reject)
})
}
timeout(1000, event).then(function(stream) {
// process stream
}).catch(function(error) {
// might be a timeout error
})