-
Notifications
You must be signed in to change notification settings - Fork 6
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
when(fulfilled: promises, cancelOnFailure: true)
does not seem to propagate cancel calls correctly - when requestCancel is called on the resulting promises, the sub-promises never receive a cancel request. This only happens with cancelOnFailure=true.
Below is my unit test reproducing the issue: The promise completes successfully even though cancel was called. didCancel
is never set to true.
func testCancelingWhen() {
var didCancel = false
var resolveHooks: [()->()] = []
let expectation = XCTestExpectation(description: ".always is called")
let createPromise = {
return Promise<(), NoError>(on: .main) {
resolver in
resolver.onRequestCancel(on: .immediate) {
resolver in
didCancel = true
resolver.cancel()
}
resolveHooks.append {
resolver.fulfill(with: ())
}
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
resolveHooks.forEach { hook in hook() }
}
let whenPromise = when(fulfilled: [createPromise(), createPromise()], cancelOnFailure: true).then {
_ in
XCTFail("Should not complete.")
}
whenPromise.requestCancel()
whenPromise.always {
_ in
expectation.fulfill()
XCTAssert(didCancel, "No cancel was propagated.")
}
wait(for: [expectation], timeout: 1)
}
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working