RxJS: invoke two async calls, return the first that passes a condition, or a special value of none of them does

Using RxJS, I want to invoke two different asynchronous operations, which may or may not return null. They may also take indefinite time to complete.

I want to achieve the following:

  • If operation A returns value 1, then immediately return value 1
  • If operation B returns value 2, then immediately return value 2
  • If both operation A and B return null, then return null.

I suppose I can achieve the first two simply as follows:

const bothOperations = merge(callA(), callB());
const firstSuccess = bothOperations.first(res => res !== null);
return firstSuccess;

But how do I get the third possibility into this?

Source: AngularJS

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.