Git Product home page Git Product logo

Comments (6)

shoumikhin avatar shoumikhin commented on April 28, 2024

Hi @umbri,

Any usage examples?

from promises.

 avatar commented on April 28, 2024
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")
    })

from promises.

shoumikhin avatar shoumikhin commented on April 28, 2024

Thank you!

But I don't see a progress passed as an argument to when, as you proposed.
The example above can be rewritten as the following without any changes to the Promises APIs:

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

from promises.

 avatar commented on April 28, 2024

@shoumikhin Sorry, I just added an example where this can be useful, I thought it will be a syntax sugar for someone who need Progress

i think something like this:

when([Promise<T>], progress: Progress? = nil)

from promises.

shoumikhin avatar shoumikhin commented on April 28, 2024

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.

from promises.

 avatar commented on April 28, 2024

Thank you

from promises.

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.