2015-12-23 92 views
1

我試圖通過WAMP調用遠程函數。但是如果它具有異步行爲,我不知道如何編寫被調用的函數。在我看過的每個例子中,遠程函數返回的結果。這怎麼能以異步的方式完成,我通常會使用回調?AutobahnJS:遠程調用異步函數

例如: 這是一個函數的註冊,它可以異步獲取文件的內容。

session.register('com.example.getFileContents', getFileContents).then(
    function (reg) { 
     console.log("procedure getFileContents() registered"); 
    }, 
    function (err) { 
     console.log("failed to register procedure: " + err); 
    } 
); 

以下是我將如何遠程調用該功能。

session.call('com.example.getFileContents', ["someFile.txt"]).then(
    function (res) { 
     console.log("File Contents:", res); 
    }, 
    function (err) { 
     console.log("Error getting file contents:", err); 
    } 
); 

但是,這裏是註冊的實際功能。

function getFileContents(file) { 
    fs.readFile(file, 'utf8', function(err, data) { 

     // How do I return the data? 
    }); 
} 

如何從getFileContents中返回數據,以便通過WAMP連接發回數據?我知道我可以使用readFileSync並返回它返回的內容。但我特別要求如何以異步方式做到這一點。

回答

1

我想通過承諾如何做到這一點。這是函數如何用promise實現的。

var fs = require('fs'); 
var when = require('when'); 

function getFileContents(file) { 
    var d = when.defer(); 
    fs.readFile(file, 'utf8', function(err, data) { 
     d.resolve(data); 
    }); 
    return d.promise; 
}