AutobahnJS:对异步函数的远程调用



我正试图通过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并返回它返回的内容。但我特别想知道如何以异步方式实现这一点。

我发现了如何使用promise来实现这一点。以下是如何使用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;
}

相关内容

  • 没有找到相关文章

最新更新