AutobahnJS:远程调用异步功能

时间:2015-12-23 14:13:06

标签: javascript node.js autobahn crossbar wamp-protocol

我试图通过WAMP拨打远程功能。但是,如果它具有异步行为,我不知道如何编写被调用的函数。在每个例子中,我都看到远程函数返回结果。如何以异步方式完成此操作,我通常会使用回调?

实施例: 这是一个函数的注册,它将异步获取文件的内容。

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 个答案:

答案 0 :(得分:1)

我想出了如何用promises做到这一点。以下是使用promises实现该功能的方法。

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;
}