我正在使用ember.js和RSVP。
在我看来,没有任何东西可以处理异步调用的超时。
我的想法是使用装饰器模式包装resolve处理程序,将resolve处理程序包装在一些代码中,这些代码将对调用计时,并在发生超时时调用reject。
这听起来是个好主意,还是有一些内置的对超时的支持,我在RSVP中错过了。
发布于 2016-06-22 11:30:01
对于不使用jQuery的应用程序,您可以创建抛出超时错误的promise对象,并使用Promise.race运行任务以获得第一个结果。
/**
* @param {number} msWait
* @param {string} error - error message
* @return {Promise}
*/
const promiseTimeout = (msWait, error) => {
return new Promise((resolve, reject) => {
setTimeout(() => reject(new TimeoutError(error)), msWait)
})
}
// Run tasks with timeout error
Promise.race([
Android.detector(),
IOS.detector(),
promiseTimeout(settings.platformDetectionTimeout, 'Can\'t detect your platform')
])发布于 2014-03-30 08:00:24
您可以这样做,但这可能应该由正在执行异步操作的任何设备来处理。如果您使用的是jQuery ajax,那么:
$.ajax({
//...
timeout: 1000 * 10 // 10 seconds
//...
})如果您控制服务器端并预计会出现拥塞,那么您应该在该级别中断长时间运行的进程并返回错误。
https://stackoverflow.com/questions/22685055
复制相似问题