javascript - RxJS 重试运算符与 ajax 调用

标签 javascript rxjs

我试图找出为什么我的重试在这个例子中不起作用: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 或相关运算符(operator)抛出异常来强制此调用失败,那么它根本不起作用。

提前致谢!

最佳答案

当您将 Promise 传递给 fromPromise 并调用重试时,它只会继续发出相同的 Promise(即不会发出后续的 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 版本才能使用此功能

关于javascript - RxJS 重试运算符与 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073058/

相关文章:

javascript - ngrx 使用调度时从列表中删除项目

javascript - 用于初始化两个值之间切换的 RxJS 模式

javascript - 动画代码不起作用

javascript - 我如何从 Android 中的 cordova 插件获取返回值?

javascript - 两个事件都在焦点上,是否需要 JS?

angular - subscribe 做什么,它与 Observable 有什么关系?

angular - import {Observable} from 'rxjs/Observable' 和 import {Observable} from 'rxjs' 有什么区别吗?

typescript - Angular2 合并可观察对象

javascript - 将特定图像从一个 div 克隆到另一个 div 但更改 onClick 和 ID

Javascript - 使用数组中的键复制对象