Javascript RxJS重试操作符与ajax调用

Javascript RxJS重试操作符与ajax调用,javascript,rxjs,Javascript,Rxjs,我试图弄清楚为什么在本例中使用retry不起作用: 我已经将ajax调用封装在searchWikipedia函数中的Observable中,但是如果我试图通过关闭wifi或相关运营商抛出异常来强制此调用失败,那么它根本不起作用 提前谢谢 当您将承诺传递给fromPromise并调用retry时,它将继续发出相同的承诺(即不会发出后续HTTP请求) 如果您将一个函数传递给fromPromise,该函数将被重新调用(允许在失败时发送后续HTTP请求)。以下示例说明了这一点: const makesP

我试图弄清楚为什么在本例中使用retry不起作用:

我已经将ajax调用封装在searchWikipedia函数中的Observable中,但是如果我试图通过关闭wifi或相关运营商抛出异常来强制此调用失败,那么它根本不起作用


提前谢谢

当您将承诺传递给
fromPromise
并调用retry时,它将继续发出相同的承诺(即不会发出后续HTTP请求)

如果您将一个函数传递给
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版本才能使用此功能

请将代码直接插入问题本身。链接可能会更改并过时,从而使您的问题无效。@scriptHero,好的,很抱歉问题文本不方便,感谢您为我修复了它。另一种说法是,您没有给RxJS一种创建承诺/发出请求的方法,因此它在重试时不知道如何执行。相反,您提出了请求,并仅给出了结果(承诺)。这就像给一个人一条鱼和教他如何钓鱼之间的区别。如果你给了某人一条鱼,但结果却不见了,而你却看不见,那么他们能做的最好的事情就是希望你带着一条新的、新鲜的鱼回来。
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