2015-12-23 37 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; 
}