exit loop and dispose subscription immediately
This commit is contained in:
parent
5499c10f9a
commit
14affd773c
|
|
@ -180,24 +180,25 @@ extension BlockingObservable {
|
|||
switch e {
|
||||
case .Next(let e):
|
||||
do {
|
||||
if try error == nil && predicate(e) {
|
||||
if element == nil {
|
||||
element = e
|
||||
} else {
|
||||
error = RxError.MoreThanOneElement
|
||||
}
|
||||
if try !predicate(e) {
|
||||
return
|
||||
}
|
||||
if element == nil {
|
||||
element = e
|
||||
} else {
|
||||
throw RxError.MoreThanOneElement
|
||||
}
|
||||
} catch (let err) {
|
||||
error = err
|
||||
d.dispose()
|
||||
lock.stop()
|
||||
}
|
||||
return
|
||||
case .Error(let e):
|
||||
error = e
|
||||
lock.stop()
|
||||
case .Completed:
|
||||
if error != nil {
|
||||
break
|
||||
} else if element == nil {
|
||||
if error == nil && element == nil {
|
||||
error = RxError.NoElements
|
||||
}
|
||||
break
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ extension ObservableBlockingTest {
|
|||
catch let e {
|
||||
XCTAssertTrue((e as! RxError)._code == RxError.MoreThanOneElement._code)
|
||||
}
|
||||
XCTAssertEqual(predicateVals, [42, 43, 44])
|
||||
XCTAssertEqual(predicateVals, [42, 43, 44, 45])
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -257,7 +257,7 @@ extension ObservableBlockingTest {
|
|||
catch let e {
|
||||
XCTAssertTrue(e as NSError === testError)
|
||||
}
|
||||
XCTAssertEqual(predicateVals, [42, 43])
|
||||
XCTAssertEqual(predicateVals, [42, 43, 44, 45])
|
||||
}
|
||||
|
||||
func testSingle_predicate_fail() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue