ファイバー経由で実行される関数を (正常に停止するかどうかにかかわらず) 停止したいと思います。ファイバーには、それを行うための throwInto() および reset() メソッドがあります。しかし、それを使用すると、コールバックが再起動します。なぜなのかご存知ですか ?
ここに私がやったことの小さな例があります。
コード:
Fiber = require("fibers")
f = Fiber(function(){
try{
console.log("First Wait 1000 sec");
fiber = Fiber.current
setTimeout(function(){
fiber.run()
}, 1000);
Fiber.yield()
console.log("End of first wait");
console.log("Second Wait 1000 sec");
fiber = Fiber.current
setTimeout(function(){
fiber.run()
}, 1000);
Fiber.yield()
console.log("End of second wait");
}catch(err){
console.log("Got an error");
console.log(err);
console.log("Third Wait 1000 sec");
fiber = Fiber.current
setTimeout(function(){
fiber.run()
}, 1000);
Fiber.yield()
console.log("End of third wait");
}
return 0;
});
f.run();
setTimeout(function(){
f.throwInto(new Error("End gracefully"));
//f.reset(); //End brutally
}, 500);
出力:
First Wait 1000 sec
Got an error
[Error: End gracefully]
Third Wait 1000 sec
End of third wait
First Wait 1000 sec
End of first wait
Second Wait 1000 sec
End of second wait