Autobahn JS:远程调用异步函数
AutobahnJS: Remote call to asyncronous function
我正在尝试通过 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?
});
}
如何 return 来自 getFileContents 的数据,以便它可以通过 WAMP 连接发回?我知道我可以使用 readFileSync 和 return what it returns。但我特别询问如何以异步方式执行此操作。
我想出了如何用 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;
}
我正在尝试通过 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?
});
}
如何 return 来自 getFileContents 的数据,以便它可以通过 WAMP 连接发回?我知道我可以使用 readFileSync 和 return what it returns。但我特别询问如何以异步方式执行此操作。
我想出了如何用 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;
}