How to set a time limit for running an asynchronous function in node.js?

There is an asynchronous function fun(param, callback), for example:

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

How to set a time limit to run this function?
For example, I set the time interval to 10 seconds.
If it ends after 10 seconds, there will be no error.
If it exceeds 10 seconds, complete it and show an error.

+4
source share
3 answers

Promises are ideal for this behavior, you might 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);

ES6 Promise. , - bluebird, , - .

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

, , . ,

+4

- .

var Promise = require("bluebird");
var elt = new Promise((resolve, reject) => {
   fun(param, (err) => {
     if (err) reject(err);
     doSomething();
     resolve();
});

elt.timeout(1000).then(() => console.log('done'))
                 .catch(Promise.TimeoutError, (e) => console.log("timed out"))
+2

I made the module "intelli-timer"

var timer = require('intelli-timer');

timer.countdown(10000, function(timerCallback){  // time limit is 10 second

    do_something_async(err, function(){
        timerCallback();    // timerCallback() after finish
    });

}, function(err){

    if(err) console.log(err);  // err is null when the task is completed in time
    else console.log('success');

});
0
source

All Articles