2015-12-15 24 views
0

我正在与流星,我试图从外部数据库(neo4j的情况下)检索数据。Meteor.call()返回值,而服务器有异步工作

我的问题是当我从客户端到服务器的Meteor.call()我需要在服务器功能中有一个return声明。但是从数据库中检索数据本身就是异步的。

这是什么,我有一个snippest:

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

任何想法?

回答

2

您可以使用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(); 
    } 
}); 

您可以通过以下链接了解更多关于流星的异步模式:

Async On Meteor Server

Meteor Async Guide

Meteor Patterns: Call an asynchronous function and use its returned value

随意问你是否需要进一步的帮助。

+1

工作就像一个魅力(: –