Scott Weinstein
Scott Weinstein

Reputation: 19117

Convert asynchronous/callback method to blocking/synchronous method

Is is possible to convert an asynchronous/callback based method in node to blocking/synchronous method?

I'm curious, more from a theoretical POV, than a "I have a problem to solve" POV.

I see how callback methods can be converted to values, via Q and the like, but calling Q.done() doesn't block execution.

Upvotes: 4

Views: 2857

Answers (3)

Lakshmi Swetha G
Lakshmi Swetha G

Reputation: 2849

To turn asynchronous functions to synchronous in 'multi-threaded environment', we need to set up a loop checking the result, therefore cause blocking.

Here’s the example code in JS:

    function somethingSync(args){
    var ret; //the result-holding variable
    //doing something async here...
    somethingAsync(args,function(result){
    ret = result;
    });
    while(ret === undefined){} //wait for the result until it's available,cause the blocking
return ret;
    }

OR

synchronize.js also helps.

Upvotes: 1

Vadim Baryshev
Vadim Baryshev

Reputation: 26219

The node-sync module can help you do that. But please be careful, this is not node.js way.

Upvotes: 2

Nick Mitchinson
Nick Mitchinson

Reputation: 5480

While I would not recommend it, this can easy be done using some sort of busy wait. For instance:

var flag = false;
asyncFunction( function () { //This is a callback
    flag = true;
})

while (!flag) {}

The while loop will continuously loop until the callback has executed, thus blocking execution.

As you can imagine this would make your code very messy, so if you are going to do this (which I wouldn't recommend) you should make some sort of helper function to wrap your async function; similar to Underscore.js's Function functions, such as throttle. You can see exactly how these work by looking at the annotated source.

Upvotes: -1

Related Questions