[英]RSVP - Handling timeouts with promises
我正在使用 ember.js 和 RSVP。
據我所知,沒有什么可以處理異步調用超時。
我的想法是使用裝飾器模式包裝解析處理程序,將解析處理程序包裝在一些代碼中,這些代碼將計時調用並在超時發生時調用拒絕。
這聽起來是個好主意還是我在 RSVP 中遺漏了一些對超時的內置支持。
對於不使用jQuery的應用程序,您可以創建一個拋出超時錯誤的承諾對象,並使用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')
])
您可以這樣做,但這可能應該由執行異步操作的任何人來處理。 如果您使用的是 jQuery ajax,則:
$.ajax({
//...
timeout: 1000 * 10 // 10 seconds
//...
})
如果您控制服務器端並預期擁塞,那么您應該在該級別中斷長時間運行的進程並返回錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.