-
-
Notifications
You must be signed in to change notification settings - Fork 71
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
Promise.reduce(array, mapFn, initialValue) #46
Comments
This seems like it might unintentionally create waterfalls (sequential execution instead of concurrent)? Is this the only way that your function could run? Would it be possible to throw a Promise.all somewhere before this? |
I feel mixed on this. Assuming you had a reduce function from another library (like cryo or something), could you just throw an :expect() at the end of the Promise to turn it into a yielding call? |
This is a better explanation of the feature: http://bluebirdjs.com/docs/api/promise.reduce.html It is sequential because of the reduce operation, but the advantage is that it returns a promise instead of yielding until the actual result. |
Correct me if I'm wrong @oltrep, but this is also has the benefit of a single Also, this is a great library @evaera, thank you so much! Do you feel an |
I see! I think this can be useful. My only reservation would be inadvertently encouraging people to reach for the Promise library to do common operations like reduce or map, which would incur a lot of unnecessary overhead, rather than using a library like Cryo or similar which doesn't have extra machinery for handling asynchronous code. That said, I think that when used in the right scenario, an abstraction like this will save time and prevent mistakes. I imagine it could be implemented over the existing function Promise.fold(list, predicate, initialValue)
local accumulator = initialValue
return Promise.each(list, function(value)
accumulator = predicate(value, accumulator)
end):andThenReturn(accumulator)
end I think I prefer the name If you submit a PR, please:
Thanks! |
Thank you! 😄 |
I encountered a use case where I need to do an array reduce operation with a callback that may return a promise. When the reduce callback returns the first promise, the reduction will continue after each promise resolves.
If that's a feature you would like for this library, I can submit a pull request for it!
The text was updated successfully, but these errors were encountered: