Skip to content

Instantly share code, notes, and snippets.

@schotime
Created April 6, 2016 13:40
Show Gist options
  • Save schotime/a63a88e0761ead932639381ca5a73590 to your computer and use it in GitHub Desktop.
Save schotime/a63a88e0761ead932639381ca5a73590 to your computer and use it in GitHub Desktop.
https://www.typescriptlang.org/play/index.html#src=interface%20IContext%3CT%3E%20%7B%0D%0A%09input%3A%20any%2C%0D%0A%09state%3A%20any%2C%0D%0A%09output%3A%20T%2C%0D%0A%09services%3A%20any%0D%0A%7D%0D%0A%0D%0Atype%20IRes%20%3D%20IResult%20%7C%20void%0D%0A%0D%0Ainterface%20IResult%20%7B%0D%0A%09success%3A%20((input%3A%20any)%20%3D%3E%20IRes)%2C%0D%0A%09error%3A%20((input%3A%20any)%20%3D%3E%20IRes)%0D%0A%7D%0D%0A%0D%0Aclass%20SignalBuilder%20%7B%0D%0A%09private%20signals%20%3D%20%5B%5D%3B%0D%0A%09dor%3CT%3E(func%3A%20(input%3A%20IContext%3CT%3E)%20%3D%3E%20void)%3A%20SignalBuilderResult%3CT%3E%20%7B%0D%0A%09%09this.signals.push(func)%3B%0D%0A%09%09return%20new%20SignalBuilderResult%3CT%3E(this%2C%20this.signals)%3B%0D%0A%09%7D%0D%0A%09do%3CT%3E(...func%3A%20((input%3A%20IContext%3CT%3E)%20%3D%3E%20void)%5B%5D)%3A%20SignalBuilder%20%7B%0D%0A%09%09for%20(var%20item%20of%20func)%20this.signals.push(item)%3B%0D%0A%09%09return%20this%3B%0D%0A%09%7D%0D%0A%09build()%20%7B%0D%0A%09%09return%20this.signals%3B%0D%0A%09%7D%0D%0A%7D%0D%0A%0D%0Aclass%20SignalBuilderResult%3CT%3E%20%7B%0D%0A%09private%20signalBuilder%3A%20SignalBuilder%3B%0D%0A%09private%20signals%3A%20any%5B%5D%3B%0D%0A%09constructor(signalBuilder%2C%20signals)%20%7B%0D%0A%09%09this.signalBuilder%20%3D%20signalBuilder%3B%0D%0A%09%09this.signals%20%3D%20signals%3B%0D%0A%09%7D%0D%0A%09then(resolvers%3A%20T)%20%7B%0D%0A%09%09this.signals.push(resolvers)%3B%0D%0A%09%09return%20this.signalBuilder%3B%0D%0A%09%7D%0D%0A%7D%0D%0A%0D%0Afunction%20action1(context%3A%20IContext%3CIResult%3E)%3A%20void%20%7B%0D%0A%09context.output.success(%7B%20data%3A%20%22success%22%20%7D)%3B%0D%0A%09context.output.error(%7B%20data%3A%20%22error%22%20%7D)%3B%0D%0A%7D%0D%0A%0D%0Afunction%20action2(%7Boutput%7D%3A%20IContext%3CIResult%3E)%3A%20void%20%7B%0D%0A%0D%0A%7D%0D%0A%0D%0Afunction%20action3(context%3A%20IContext%3CIResult%3E)%3A%20void%20%7B%0D%0A%7D%0D%0A%0D%0Avar%20signals%20%3D%20new%20SignalBuilder()%0D%0A%09.dor(action1)%0D%0A%09.then(%7B%0D%0A%09%09success%3A%20function%20(context%3A%20IContext%3CIResult%3E)%20%7B%20%7D%2C%0D%0A%09%09%2F%2Ferror%3A%20function%20(context)%20%7B%20%7D%0D%0A%09%7D)%0D%0A%09.do(action2)%0D%0A%09.do(action3)%0D%0A%09.build()%3B%0D%0A%0D%0Aalert(signals%5B0%5D%20%3D%3D%20action1)%0D%0A
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment