2016-01-18 66 views
0

目前我有什麼是:node.js - 將res.send()移到函數的外部?

var server = http.createServer(function(req,res){ 
    res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'}); 
    var oo = require('/test.js'); 
    oo(connection, function (e, result) { 
     res.end(result); 
    }); 
}).listen(80); 

我想要做的是

var server=http.createServer(function(req,res){ 
    res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'}); 
    var oo = require('/test.js'); 
    oo(connection, function (e, result) {}); 
    res.end(result); 
}).listen(80); 

但這不起作用。

的想法是將

res.end(result); 

正上方

}).listen(80); 
+0

你爲什麼要這麼做?從它的外觀來看,'oo'是一個異步功能。如果你試圖這樣做,那麼響應將在'oo'獲得結果之前結束。 – elssar

+0

那麼你究竟做了什麼。從輸出中獲取輸出? –

+0

無需任何其他。第一個代碼片段可以正常工作 – elssar

回答

0

我不知道你爲什麼要這麼做,請閱讀about async and sync code不是最好的文章, - 但你可以找到其中很多,但我有你的解決方案。

你走之前,安裝Fibers package

npm install fibers 

解決方案:

var Future = require('fibers/future'); 
var server = http.createServer(function(req,res){ 
    fut = new Future(); 
    res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'}); 
    var oo = require('/test.js'); 
    oo(connection, function (e, result) { 
     fut.return(result); 
    }); 
    res.end(fut.wait()); 

}).listen(80); 

閱讀一些關於JS Conventions,請。

0

它不能移出回調函數,因爲在這種情況下,它會在回調之前執行,我猜測會產生一個輸出到res。此結果將不會被髮送,因爲您以前關閉了res

相關問題