从node.js光纤未来返回值

时间:2014-04-16 15:57:54

标签: javascript node.js future synchronous node-fibers

在下面的代码中,光纤按预期工作(“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);

1 个答案:

答案 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撰写。