簡體   English   中英

帶有ajax調用的RxJS重試運算符

[英]RxJS retry operator with ajax call

我想弄清楚為什么我的重試使用在這個例子中不起作用: http : //jsbin.com/bobecoluxu/edit?js,output

var response$ = Rx.Observable.fromPromise(
  $.ajax({
    url: 'http://en.wikipedia.org/w/api.php',
    dataType: 'jsonp',
    data: {
      action: 'opensearch',
      format: 'json',
      search: term
    }
  }))
.retry(3);

我已經將 ajax 調用封裝在 searchWikipedia 函數中的 Observable 中,但是如果我試圖通過關閉 wifi 或相關操作員拋出異常來強制此調用失敗,它根本不起作用。

提前致謝!

當您將承諾傳遞給fromPromise並調用重試時,它只會繼續發出相同的承諾(即不會發出后續 HTTP 請求)。

如果您將一個返回 Promise 的函數傳遞給fromPromise ,該函數將被重新調用(允許在失敗時發送后續 HTTP 請求)。 以下示例說明了這一點:

const makesPromise = () => {
    console.log('calling');

    // Purposefully reject the Promise. You would return the return value
    // of your call to $.ajax()
    return Promise.reject();
};

const stream = Rx.Observable.fromPromise(makesPromise).retry(3);

stream.subscribe(log);

// >> calling
// >> calling
// >> calling
// Finally throws an uncaught error

注意:我必須更新到最新的 RXJS 4.x 版本才能使用此功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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