簡體   English   中英

RSVP - 使用承諾處理超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM