Skip to content

Commit 343df7c

Browse files
committed
Revert progress event-handling order so that task.progress will be updated first before invoking progressClosure.
1 parent fa5881d commit 343df7c

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

SwiftTask/SwiftTask.swift

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public class Task<Progress, Value, Error>
8181
public typealias RejectHandler = (Error) -> Void
8282
public typealias Configuration = TaskConfiguration
8383

84+
public typealias ProgressTuple = (oldProgress: Progress?, newProgress: Progress)
8485
public typealias BulkProgress = (completedCount: Int, totalCount: Int)
8586

8687
public typealias PromiseInitClosure = (fulfill: FulFillHandler, reject: RejectHandler) -> Void
@@ -199,11 +200,10 @@ public class Task<Progress, Value, Error>
199200
}
200201

201202
// TODO: how to nest these inside StateMachine's initClosure? (using `self` is not permitted)
202-
// NOTE: use order > 100 (default) to let `progressClosure(self.progress, newProgress)` be invoked first before updating old `self.progress`
203-
self.machine.addEventHandler(.Progress, order: 110) { [weak self] context in
204-
if let progress = context.userInfo as? Progress {
203+
self.machine.addEventHandler(.Progress, order: 90) { [weak self] context in
204+
if let progressTuple = context.userInfo as? ProgressTuple {
205205
if let self_ = self {
206-
self_.progress = progress
206+
self_.progress = progressTuple.newProgress
207207
}
208208
}
209209
}
@@ -233,7 +233,8 @@ public class Task<Progress, Value, Error>
233233
if weakified {
234234
progressHandler = { [weak self] (progress: Progress) in
235235
if let self_ = self {
236-
self_.machine <-! (.Progress, progress)
236+
let oldProgress = self_.progress
237+
self_.machine <-! (.Progress, (oldProgress, progress))
237238
}
238239
}
239240

@@ -251,7 +252,8 @@ public class Task<Progress, Value, Error>
251252
}
252253
else {
253254
progressHandler = { (progress: Progress) in
254-
self.machine <-! (.Progress, progress)
255+
let oldProgress = self.progress
256+
self.machine <-! (.Progress, (oldProgress, progress))
255257
return
256258
}
257259

@@ -278,11 +280,11 @@ public class Task<Progress, Value, Error>
278280
self._cancel(error: nil)
279281
}
280282

281-
public func progress(progressClosure: (oldProgress: Progress?, newProgress: Progress) -> Void) -> Task
283+
public func progress(progressClosure: ProgressTuple -> Void) -> Task
282284
{
283285
self.machine.addEventHandler(.Progress) { [weak self] context in
284-
if let progress = context.userInfo as? Progress {
285-
progressClosure(oldProgress: self?.progress, newProgress: progress)
286+
if let progressTuple = context.userInfo as? ProgressTuple {
287+
progressClosure(progressTuple)
286288
}
287289
}
288290

0 commit comments

Comments
 (0)