Giter Club home page Giter Club logo

Comments (5)

nlutsenko avatar nlutsenko commented on July 17, 2024

That's a great suggestion, but there is a weird scenario here, that I would love to discuss.

Taking into account that continueOnErrorWith doesn't run at all times, and only runs when the task is faulted - returning a non TResult from it is making an entire chain of tasks behave in a weird way, that is allowed by the type system at that point, but looks very weird and strange.

Let me give you an example:

let continueTask = task.continueOnSuccessWithTask { (settings: Settings) -> Task<String> in
    return self.updateSettingsTask()
}.task.continueOnErrorWith { (error: ErrorType) -> () in
    self.showError(error)
}

The type of continueTask is Task<Void> and not Task<Settings>, but if the entire chain succeeds and actual result of continueTask is of type Settings and not Void.

At the current moment continueOnErrorWith is built for error recovery, where it still doesn't violate the type system and the final result of the chain of tasks.

cc @grantland @richardjrossiii for discussion

from bolts-swift.

nlutsenko avatar nlutsenko commented on July 17, 2024

We have makeVoid() in Bolts-Android, and looks like it might be a great candidate for this scenario, where you won't have to create an empty continuation just to cast the task to Void result.

from bolts-swift.

AgentFeeble avatar AgentFeeble commented on July 17, 2024

I always thought of the error handler as being at the end of the chain, so I didn't consider that situation. I think that putting the error handler at the end of the chain is probably the way its used most of the time, but I agree that enforcing this restriction at the framework level isn't great.

I can also see the workaround I proposed suffers from the same issue. I don't see how the current implementation solves it though, without the makeVoid method. Is the error handler responsible for generating the correct result?

I like the idea of makeVoid(). How does it work though? Is the result of the previous task in the chain passed on to the error handlers continuations? The only problem with that is, we don't know which task in the chain failed, and a result might not have been created yet. The only way I see it working is if the error handler generates the result. Am I right in thinking this way?

from bolts-swift.

AgentFeeble avatar AgentFeeble commented on July 17, 2024

I still feel like my proposed solution provides the flexibility to be able to switch to a void task, or return a result of the same type as the previous task in the chain. The swift compiler is smart enough to pick up any type mismatches. But this way the developer will have the flexibility to decide which way to use it.

Or Is the explicit makeVoid call to opt in to the functionality preferred over the implicit switch? The more I think about it, the more it seems like its just a matter of style preference, explicit vs implicit

from bolts-swift.

jkmathew avatar jkmathew commented on July 17, 2024

Hi @nlutsenko , I think makeVoid()'s counter part in swift is emptyTask(). But it is internal function. How we can make youse of internal functions in our own modules.

from bolts-swift.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.