2016-02-04 27 views
2

我有一個名爲createMessage的方法,我傳遞一個請求和一個響應。 當調用此方法時,它當前返回未定義,因爲它在檢索所有數據之前結束。有什麼方法可以讓它等待?在節點中,如何才能讓函數在獲取所需的所有數據後才返回?

createMessage: function(request, response) { 
     var totalData = ''; 
     request.on('data', function(data) { 
     totalData += data.toString(); 
     }); 
     request.on('end', function() { 
     totalData = JSON.parse(totalData); 
     totalData.created_at = new Date(); 
     return totalData; 
     }) 
    }); 
    } 
+2

你不能。你必須爲此使用回調函數。 –

回答

2

在終端函數內調用一個回調作爲它的異步。這是節點

createMessage: function(request, response, callback) { 
     var totalData = ''; 
     request.on('data', function(data) { 
     totalData += data.toString(); 
     }); 
     request.on('end', function() { 
     totalData = JSON.parse(totalData); 
     totalData.created_at = new Date(); 
     callback(totalData) 
     }) 
    }); 
    } 
+0

而@robrich指出第一個參數應該是按照慣例的錯誤。 –

1

以@ MEDER的回答一步的性質:你需要一個回調來做到這一點,你不能等待......因爲JavaScript是單線程的。

createMessage: function(request, response, callback) { 
    var totalData = ''; 
    request.on('data', function(data) { 
    totalData += data.toString(); 
    }); 
    request.on('end', function() { 
    totalData = JSON.parse(totalData); 
    totalData.created_at = new Date(); 
    callback(null, totalData); // all done 
    }); 
} 

按照約定在節點中,回調的第一個參數是一個錯誤,如果有的話。因爲它沒有錯誤,所以此回調中的第一個參數是null

相關問題