2017-09-29 5 views
1

私は成長するにつれてファイルを読むためにtxtファイルが大きくなり、以下の関数があります。この関数は、私はルートjsに入れて、$ httpの呼び出しで呼び出す。物事はうまくいっていますが、私は関数の呼び出しを読み終えたり、取り消したりする方法がわかりません。代わりに使用するのでは、node.jsクライアントからの関数の実行を終了する方法

var fs = require('fs'), 
    bite_size = 256, 
    readbytes = 0, 
    file; 

fs.open('test.txt', 'r', function(err, fd) { 
    file = fd; //readsome(); 

    var func = (function readsome() { 
    var stats = fs.fstatSync(file); // yes sometimes async does not make sense! 
    if(stats.size<readbytes+1) { 
     console.log('Hehe I am much faster than your writer..! I will sleep for a while, I deserve it!'); 
     setTimeout(readsome, 1000); 
    } 
    else { 
     fs.read(file, new Buffer(bite_size), 0, bite_size, readbytes, function (err, bytecount, buff) { 
     console.log(buff.toString('utf-8', 0, bytecount)); 
     readbytes+=bytecount; 
     process.nextTick(readsome); 
     }); 
    } 
    })(); 

}); 

答えて

1

まず助けてください

process.nextTick(readsome); 

setImmediate(readsome); 

process.nextTickが中断することはかなり難しいです。 this discussionを参照してください。

次に、readSomeの先頭で、キャンセルする必要があるかどうかを確認してください。キャンセルする場合は、キャンセルしてください。関数を取り消したいときや、それを何らかの要求状態に含めるときに、グローバル変数を設定することができます。中止する条件に応じてキャンセルする方法に関する情報を保存する場所の詳細。

+0

どうもありがとう。私はちょうど示唆し、同じファイル内の別のAPI呼び出しを介してグローバル変数値を変更しました。 – sand

関連する問題