-
Notifications
You must be signed in to change notification settings - Fork 290
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proposal: Progress for all, any, when #35
Comments
Hi @umbri, Any usage examples? |
let progress = Progress(totalUnitCount: 4) // promises count
when([
Promise<String> { fulfill, reject in
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
print("1")
progress.completedUnitCount += 1
fulfill("1")
})
},
Promise { fulfill, reject in
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: {
print("2")
progress.completedUnitCount += 1
fulfill("2")
})
},
Promise { fulfill, reject in
DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: {
print("3")
progress.completedUnitCount += 1
fulfill("3")
})
},
Promise { fulfill, reject in
DispatchQueue.main.asyncAfter(deadline: .now() + 4, execute: {
print("4")
progress.completedUnitCount += 1
fulfill("4")
})
}
])
.then({ (_) in
print("DONE")
}) |
Thank you! But I don't see a progress passed as an argument to func subtask(_ overallProgress: Progress) -> Promise<Void> {
let progress = Progress(totalUnitCount: 10, parent: overallProgress, pendingUnitCount: 1)
return Promise<Void> {
guard isEverythingStillOK else {
progress.cancel()
throw MyError.somethingIsNotOK
}
progress.completedUnitCount = progress.totalUnitCount // Complete the child progress
return ()
}
}
let overallProgress = Progress(totalUnitCount: 2)
when(subtask(overallProgress), subtask(overallProgress)).then { _ in
// At least one subtask has succeeded
}
// Observe overallProgress.fractionCompleted |
@shoumikhin Sorry, I just added an example where this can be useful, I thought it will be a syntax sugar for someone who need i think something like this: when([Promise<T>], progress: Progress? = nil) |
I do like the general idea. Although, at the moment, I believe it should be more involving than just passing an existing progress object to Promises APIs. Because if we went that way, that wouldn't be a big win, because one could track the progress separately, as I showed above. It's just not worth complicating the library APIs for something rarely used, that can be easily achieved the other clear way. But embedding progress reporting and cancellation into Promises would be great. We even have some prototypes internally and still working on that. Once we have anything working, I'll follow up here. |
Thank you |
Hi,
It will be very useful if we have
progress: Progress? = nil
as last argument toExtensions
that get an array of promises likeall
,any
,when
The text was updated successfully, but these errors were encountered: