在下面的代码中,光纤按预期工作(“1”和“2”相隔2秒打印)。但是,我想从fiberFunction返回“3”并同步打印。这不起作用。这是输出:
1
Temp: undefined
2
有人知道如何从光纤功能中返回值吗?
var Fiber = require('fibers');
var Future = require('fibers/future'), wait = Future.wait;
function sleep(ms) {
var future = new Future;
setTimeout(function() {
future.return();
}, ms);
return future;
}
var fiberFunction = Fiber(function() {
console.log("1");
sleep(2000).wait();
console.log("2");
return "3";
});
var fiberReturn = fiberFunction.run();
console.log("Temp: " + fiberReturn);
答案 0 :(得分:0)
所以你的问题是fiberFunction
不是一个函数,它是一个光纤实例,而光纤实例不返回任何东西。此外,您不应该直接使用Future.wait - 您应该只等待实例。
你应该这样做:
var Fiber = require('fibers')
var Future = require('fibers/future')
function sleep(ms) {
var future = new Future
setTimeout(function() {
future.return()
}, ms)
return future
}
var yourFunction = function() {
console.log("1")
sleep(2000).wait()
console.log("2")
return "3"
}
Fiber(function() {
console.log("Temp: " + yourFunction())
}).run()
我建议您在使用光纤或期货之前仔细阅读README documentation。
这是从node-fibers issue #171复制的,因为许多人最终都来到这里。最初由fresheneesz
撰写。