Garry's Mod Wiki

Revision Difference

coroutine.wrap#561423

<function name="wrap" parent="coroutine" type="libraryfunc"> <description>Returns a function which calling is equivalent with calling <page>coroutine.resume</page> with the coroutine and all extra parameters. The values returned by the returned function only contain the values passed to the inner <page>coroutine.yield</page> call and do not include the *no error* status that <page>coroutine.resume</page> provides. In case of failure, an error is thrown instead. </description> <realm>Shared and Menu</realm> <args> <arg name="coroutine" type="function">Coroutine to resume.</arg> </args> <rets> <ret name="" type="function">func</ret>⤶ <ret name="" type="function"></ret>⤶ </rets> </function> <example> <description>Performs a standard HTTP request while waiting for the server response to continue executing the code. Useful to improve the readability of the code and avoid using callback functions.</description> <code> local function HTTPRequest( url, headers ) local running = coroutine.running() local function onSuccess( body, length, header, code ) coroutine.resume( running, true, body ) end local function onFailure( err ) coroutine.resume( running, false, err ) end http.Fetch( url, onSuccess, onFailure, headers ) return coroutine.yield() end coroutine.wrap( function() local state, response = HTTPRequest( "https://www.google.com/" ) if state then -- Success! print( "HTTP body:" .. response ) else -- Error(?) print( "HTTP request error: " .. response ) end -- Important code to be performed after the request is completed.. end )() </code> <output>The body of the HTTP page if the request was successful, otherwise the error code in case of failure.</output> </example>