【问题标题】:AutobahnJS: Remote call to asyncronous functionAutobahn JS:远程调用异步函数
【发布时间】:2015-12-23 14:13:06
【问题描述】:

我正在尝试通过 WAMP 调用远程函数。但是如果它具有异步行为,我不知道如何编写被调用函数。在每个示例中,我都看到远程函数 returns 结果。在我通常使用回调的情况下,如何以异步方式完成此操作?

示例: 这是一个异步获取文件内容的函数的注册。

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 并返回它返回的内容。但我特意询问如何以异步方式执行此操作。

【问题讨论】:

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


    【解决方案1】:

    我想出了如何用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多