2014-04-16 86 views
3

在下面的一段代碼中,光纖按預期工作(「1」和「2」間隔2秒打印)。但是,我想從fiberFunction返回「3」並同步打印。這是行不通的。這裏是輸出:node.js光纖未來的返回值

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

所以你的問題是,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撰寫。