exit loop and dispose subscription immediately

This commit is contained in:
Tomi Koskinen 2015-11-11 18:41:39 +02:00
parent 5499c10f9a
commit 14affd773c
2 changed files with 12 additions and 11 deletions

View File

@ -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

View File

@ -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() {