2017-01-03 17 views
1

我有這個功能。node.js與域的時間間隔異常後不起作用

function runInDomain(func) {        
    const d = domain.create();        
    d.on('error', (er) => {         
    console.log(`error on: ${func.name}`, er, er.stack); 
    // just ignore           
    });              
    console.log(`run in domain: ${func.name}`);    

    d.run(func);            
} 

而與此運行,

function bar() {  
    console.log('bar'); 
    throw false;   
}     

setInterval(() => { runInDomain(bar) }, 1000); // 'bar' runs only one time. 

功能 '酒吧' 只運行一次:

$ node test.js 
run in domain: bar 
bar 
error on: bar false undefined 

,但與此,

setInterval(() => { setImmediate(() => { runInDomain(bar) }) }, 1000); // it works! 

它工作正常:

$ node test.js 
run in domain: bar 
bar 
error on: bar false undefined 
run in domain: bar 
bar 
error on: bar false undefined 
run in domain: bar 
bar 
error on: bar false undefined 
.... 

我不知道爲什麼第一件事不行,但第二件事不行。任何原因?

+0

你可以在這裏發佈異常輸出嗎? –

+0

@CelsoAgra好的。 – ljh131

+0

忘了描述我的'酒吧'方法,我剛剛添加。 – ljh131

回答

0

我沒有看到任何你的代碼錯誤。我做同樣的事情,在這裏,工作正常:

var domain = require('domain'); 
var fs = require('fs'); 

var runInDomain = function(func) { 
    var d = domain.create(); 

    d.on('error', function(err) { 
     console.log(`error on: ${func.name}`); 
    }); 

    d.run(func); 
} 

// any bar method 
var bar = function() { 
    fs.readFile('somefile.txt', function (err, data) { 
     if (err) throw err; 
     console.log(data); 
    }); 
} 

setInterval(() => { 
    runInDomain(bar) 
}, 1000); 

我希望它有幫助。

+0

另外,我發現了一個[post](http://stackoverflow.com/a/7313005/2130322),可以對你有用 –

+0

你的代碼也能正常工作。 (這意味着,永遠運行),爲什麼不嘗試這個,而不是你的? var bar = function(){ throw false; } – ljh131