2017-01-03 5 views
1

私はこの機能を持っています。node.jsドメインとの間隔が例外後に機能しない

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

これで、

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

それは正常に動作します:

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 
run in domain: bar 
bar 
error on: bar false undefined 
run in domain: bar 
bar 
error on: bar false undefined 
.... 

私は最初のことがうまくいかない理由は分かりませんが、2番目のことはわかりません。何らかの理由?

+0

ここに例外出力を掲載できますか? –

+0

@CelsoAgra大丈夫です。 – ljh131

+0

私の 'bar'メソッドを記述するのを忘れてしまった。 – 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

関連する問題