The following is just a section of the code, but should be enough. In this case the allocateEquipment gets called when eq is an empty array and dryRun is true. ... tap(a => console.log(a)), // logs [] length:0 concatMap(eq => iif(() => Array.isArray(eq) && eq.length > 0, iif(() => dryRun, of(eq), this.allocatEquipment(of(eq))) , EMPTY) ) Expected to return EMPTY Continue reading...