Larry Lu Larry Lu - 7 months ago 54
Javascript Question

How to set a time limit to run asynchronous function in node.js?

There is a asynchronous function

fun(param, callback)
like this:

fun(param, function(err){
if(err) console.log(err);
doSomething();
});


How do I set a time limit to run this function?

For example, I set time limit equals to 10 secs.

If it finish in 10 seconds, there is no error.

If it run exceed 10 seconds, terminate it and show error.

Answer

Promises are ideal for this kind of behavior you could have something like:

new Promise(function(resolve, reject){
   asyncFn(param, function(err, result){
        if(error){
          return reject(error);
        }
        return resolve(result)
   });

    setTimeout(function(){reject('timeout')},10000)
}).then(doSomething);

this is using the basic ES6 Promise implementation. how ever if you wan to include something like bluebird you can find more powerful tools like promisification of functions or entire modules and promise timeouts.

http://bluebirdjs.com/docs/api/timeout.html

this in my opinion would be the preferred approach. Hope this helps

Comments