I have a function in my nodejs application called get_source_at. It takes a uri as an argument and its purpose is to return the source code from that uri. My problem is that I don't know how to make the function synchronously call request, rather than giving it that callback function. I want control flow to halt for the few seconds it takes to load the uri. How can I achieve this?
function get_source_at(uri){ var source; request({ uri:uri}, function (error, response, body) { console.log(body); }); return source; }
Also, I've read about 'events' and how node is 'evented' and I should respect that in writing my code. I'm happy to do that, but I have to have a way to make sure I have the source code from a uri before continuing the control flow of my application - so if that's not by making the function synchronous, how can it be done?
To make it work, you need to wrap it inside an async function! This is how you do it: const request = async () => { const response = await fetch('https://api.com/values/1'); const json = await response.
The asynchronous function can be written in Node. js using 'async' preceding the function name. The asynchronous function returns implicit Promise as a result. The async function helps to write promise-based code asynchronously via the event-loop.
You can with deasync:
function get_source_at(uri){ var source; request({ uri:uri}, function (error, response, body) { source = body; console.log(body); }); while(source === undefined) { require('deasync').runLoopOnce(); } return source; }
You should avoid synchronous requests. If you want something like synchronous control flow, you can use async.
async.waterfall([ function(callback){ data = get_source_at(uri); callback(null, data); }, function(data,callback){ process(data, callback); }, ], function (err,result) { console.log(result) });
The process
is promised to be run after get_source_at
returns.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With