3

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

1 回答 1

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()

我建议您在认真使用 Fibers 或 futures 之前仔细阅读README 文档。


这是从node-fibers 问题 #171复制的,因为很多人最终都到了这里。最初由fresheneesz.

于 2017-02-13T03:24:38.460 回答