基于时间的承诺逻辑 - 实现超时

时间:2018-01-07 08:56:21

标签: javascript promise

让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))

1 个答案:

答案 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
})

来自Fetch API request timeout?