'#!/usr/bin/env kal' Comment.Single '\n' Text.Whitespace '\n' Text.Whitespace '# This demo executes GET requests in parallel and in series' Comment.Single '\n' Text.Whitespace '# using `for` loops and `wait for` statements.' Comment.Single '\n' Text.Whitespace '\n' Text.Whitespace '# Notice how the serial GET requests always return in order' Comment.Single '\n' Text.Whitespace '# and take longer in total. Parallel requests come back in' Comment.Single '\n' Text.Whitespace '# order of receipt.' Comment.Single '\n' Text.Whitespace '\n' Text.Whitespace 'http' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace 'require' Name.Variable ' ' Text.Whitespace "'" Literal.String 'http' Literal.String "'" Literal.String '\n\n' Text.Whitespace 'urls' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace '[' Punctuation "'" Literal.String 'http://www.google.com' Literal.String "'" Literal.String '\n ' Text.Whitespace "'" Literal.String 'http://www.apple.com' Literal.String "'" Literal.String '\n ' Text.Whitespace "'" Literal.String 'http://www.microsoft.com' Literal.String "'" Literal.String '\n ' Text.Whitespace "'" Literal.String 'http://www.nodejs.org' Literal.String "'" Literal.String '\n ' Text.Whitespace "'" Literal.String 'http://www.yahoo.com' Literal.String "'" Literal.String ']' Punctuation '\n\n' Text.Whitespace '# This function does a GET request for each URL in series' Comment.Single '\n' Text.Whitespace '# It will wait for a response from each request before moving on' Comment.Single '\n' Text.Whitespace '# to the next request. Notice the output will be in the same order as the' Comment.Single '\n' Text.Whitespace '# urls variable every time regardless of response time.' Comment.Single '\n' Text.Whitespace '# It is a task rather than a function because it is called asynchronously' Comment.Single '\n' Text.Whitespace '# This allows us to use `return` to implicitly call back' Comment.Single '\n' Text.Whitespace 'task' Keyword.Declaration ' ' Text.Whitespace 'series_demo' Name.Function '(' Punctuation ')' Punctuation '\n ' Text.Whitespace '# The `series` keyword is optional here (for loops are serial by default)' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace 'total_time' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace '0' Literal.Number.Integer '\n\n ' Text.Whitespace 'for' Keyword ' ' Text.Whitespace 'series' Keyword ' ' Text.Whitespace 'url' Name.Variable ' ' Text.Whitespace 'in' Keyword ' ' Text.Whitespace 'urls' Name.Variable '\n ' Text.Whitespace 'timer' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace 'new' Keyword ' ' Text.Whitespace 'Date' Name.Builtin '\n\n ' Text.Whitespace '# we use the `safe` keyword because get is a "nonstandard" task' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace '# that does not call back with an error argument' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace 'safe' Keyword ' ' Text.Whitespace 'wait' Keyword ' ' Text.Whitespace 'for' Keyword ' ' Text.Whitespace 'response' Name.Variable ' ' Text.Whitespace 'from' Keyword ' ' Text.Whitespace 'http.get' Name.Variable ' ' Text.Whitespace 'url' Name.Variable '\n\n ' Text.Whitespace 'delay' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace 'new' Keyword ' ' Text.Whitespace 'Date' Name.Builtin '(' Punctuation ')' Punctuation ' ' Text.Whitespace '-' Operator ' ' Text.Whitespace 'timer' Name.Variable '\n ' Text.Whitespace 'total_time' Name.Variable ' ' Text.Whitespace '+=' Operator ' ' Text.Whitespace 'delay' Name.Variable '\n\n ' Text.Whitespace 'print' Name.Builtin ' ' Text.Whitespace '"' Literal.String 'GET ' Literal.String '#{' Literal.String.Interpol 'url' Name.Variable '}' Literal.String.Interpol ' - ' Literal.String '#{' Literal.String.Interpol 'response.statusCode' Name.Variable '}' Literal.String.Interpol ' - ' Literal.String '#{' Literal.String.Interpol 'response.connection.bytesRead' Name.Variable '}' Literal.String.Interpol ' bytes - ' Literal.String '#{' Literal.String.Interpol 'delay' Name.Variable '}' Literal.String.Interpol ' ms' Literal.String '"' Literal.String '\n' Text.Whitespace '\n ' Text.Whitespace '# because we are in a task rather than a function, this actually exectutes a callback' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace 'return' Keyword ' ' Text.Whitespace 'total_time' Name.Variable '\n\n' Text.Whitespace '# This function does a GET request for each URL in parallel' Comment.Single '\n' Text.Whitespace '# It will NOT wait for a response from each request before moving on' Comment.Single '\n' Text.Whitespace '# to the next request. Notice the output will be determined by the order in which' Comment.Single '\n' Text.Whitespace '# the requests complete!' Comment.Single '\n' Text.Whitespace 'task' Keyword.Declaration ' ' Text.Whitespace 'parallel_demo' Name.Function '(' Punctuation ')' Punctuation '\n ' Text.Whitespace 'total_time' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace '0' Literal.Number.Integer '\n\n ' Text.Whitespace '# The `parallel` keyword is only meaningful here because the loop contains' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace '# a `wait for` statement (meaning callbacks are used)' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace 'for' Keyword ' ' Text.Whitespace 'parallel' Keyword ' ' Text.Whitespace 'url' Name.Variable ' ' Text.Whitespace 'in' Keyword ' ' Text.Whitespace 'urls' Name.Variable '\n ' Text.Whitespace 'timer' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace 'new' Keyword ' ' Text.Whitespace 'Date' Name.Builtin '\n\n ' Text.Whitespace '# we use the `safe` keyword because get is a "nonstandard" task' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace '# that does not call back with an error argument' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace 'safe' Keyword ' ' Text.Whitespace 'wait' Keyword ' ' Text.Whitespace 'for' Keyword ' ' Text.Whitespace 'response' Name.Variable ' ' Text.Whitespace 'from' Keyword ' ' Text.Whitespace 'http.get' Name.Variable ' ' Text.Whitespace 'url' Name.Variable '\n\n ' Text.Whitespace 'delay' Name.Variable ' ' Text.Whitespace '=' Operator ' ' Text.Whitespace 'new' Keyword ' ' Text.Whitespace 'Date' Name.Builtin '(' Punctuation ')' Punctuation ' ' Text.Whitespace '-' Operator ' ' Text.Whitespace 'timer' Name.Variable '\n ' Text.Whitespace 'total_time' Name.Variable ' ' Text.Whitespace '+=' Operator ' ' Text.Whitespace 'delay' Name.Variable '\n\n ' Text.Whitespace 'print' Name.Builtin ' ' Text.Whitespace '"' Literal.String 'GET ' Literal.String '#{' Literal.String.Interpol 'url' Name.Variable '}' Literal.String.Interpol ' - ' Literal.String '#{' Literal.String.Interpol 'response.statusCode' Name.Variable '}' Literal.String.Interpol ' - ' Literal.String '#{' Literal.String.Interpol 'response.connection.bytesRead' Name.Variable '}' Literal.String.Interpol ' bytes - ' Literal.String '#{' Literal.String.Interpol 'delay' Name.Variable '}' Literal.String.Interpol 'ms' Literal.String '"' Literal.String '\n' Text.Whitespace '\n ' Text.Whitespace '# because we are in a task rather than a function, this actually exectutes a callback' Comment.Single '\n' Text.Whitespace ' ' Text.Whitespace 'return' Keyword ' ' Text.Whitespace 'total_time' Name.Variable '\n\n' Text.Whitespace 'print' Name.Builtin ' ' Text.Whitespace "'" Literal.String 'Series Requests...' Literal.String "'" Literal.String '\n' Text.Whitespace 'wait' Keyword ' ' Text.Whitespace 'for' Keyword ' ' Text.Whitespace 'time1' Name.Variable ' ' Text.Whitespace 'from' Keyword ' ' Text.Whitespace 'series_demo' Name.Variable '(' Punctuation ')' Punctuation '\n' Text.Whitespace 'print' Name.Builtin ' ' Text.Whitespace '"' Literal.String 'Total duration ' Literal.String '#{' Literal.String.Interpol 'time1' Name.Variable '}' Literal.String.Interpol 'ms' Literal.String '"' Literal.String '\n\n' Text.Whitespace 'print' Name.Builtin ' ' Text.Whitespace "'" Literal.String "'" Literal.String '\n\n' Text.Whitespace 'print' Name.Builtin ' ' Text.Whitespace "'" Literal.String 'Parallel Requests...' Literal.String "'" Literal.String '\n' Text.Whitespace 'wait' Keyword ' ' Text.Whitespace 'for' Keyword ' ' Text.Whitespace 'time2' Name.Variable ' ' Text.Whitespace 'from' Keyword ' ' Text.Whitespace 'parallel_demo' Name.Variable '(' Punctuation ')' Punctuation '\n' Text.Whitespace 'print' Name.Builtin ' ' Text.Whitespace '"' Literal.String 'Total duration ' Literal.String '#{' Literal.String.Interpol 'time2' Name.Variable '}' Literal.String.Interpol 'ms' Literal.String '"' Literal.String '\n' Text.Whitespace