Meteor.call() 具有 return 值,而服务器具有异步工作
Meteor.call() with return value while server have async work
我正在使用 Meteor 并尝试从外部数据库(对于这种情况是 neo4j)检索数据。
我的问题是当我 Meteor.call()
从客户端到服务器时,我需要在服务器函数中有一个 return
语句。但是从数据库中检索数据本身是异步的。
这是我所拥有的最简单的片段:
client.js:
Template.test.created = function () {
Meteor.call('getData', id, function (error, response) {
if (response) {
console.log(response); //<-- reponse = "???"
}
});
}
server.js:
Meteor.methods({
"getData": function (id) {
neo.commit ( //<-- async function which expect a callback
id,
function(error, response) {
console.log(response); //<-- only here I have the response I want but now I cant "return" it.
return response;
}
);
return "???"; //<-- the actual return that is being send back
}
});
有什么想法吗?
您可以使用 Future
来解决您的问题,将您的代码更改为(根据您的代码库,可能需要进行更多更改):
...
var Future = Npm.require('fibers/future');
Meteor.methods({
"getData": function (id) {
var future = new Future();
neo.commit ( //<-- async function which expect a callback
id,
function(error, response) {
if (error) return future.throw(error);
return future.return(response);
}
);
return future.wait();
}
});
您可以在以下链接中阅读有关 Meteor 异步模式的更多信息:
Meteor Patterns: Call an asynchronous function and use its returned value
随时询问您是否需要进一步的帮助。
我正在使用 Meteor 并尝试从外部数据库(对于这种情况是 neo4j)检索数据。
我的问题是当我 Meteor.call()
从客户端到服务器时,我需要在服务器函数中有一个 return
语句。但是从数据库中检索数据本身是异步的。
这是我所拥有的最简单的片段:
client.js:
Template.test.created = function () {
Meteor.call('getData', id, function (error, response) {
if (response) {
console.log(response); //<-- reponse = "???"
}
});
}
server.js:
Meteor.methods({
"getData": function (id) {
neo.commit ( //<-- async function which expect a callback
id,
function(error, response) {
console.log(response); //<-- only here I have the response I want but now I cant "return" it.
return response;
}
);
return "???"; //<-- the actual return that is being send back
}
});
有什么想法吗?
您可以使用 Future
来解决您的问题,将您的代码更改为(根据您的代码库,可能需要进行更多更改):
...
var Future = Npm.require('fibers/future');
Meteor.methods({
"getData": function (id) {
var future = new Future();
neo.commit ( //<-- async function which expect a callback
id,
function(error, response) {
if (error) return future.throw(error);
return future.return(response);
}
);
return future.wait();
}
});
您可以在以下链接中阅读有关 Meteor 异步模式的更多信息:
Meteor Patterns: Call an asynchronous function and use its returned value
随时询问您是否需要进一步的帮助。