2015-12-15 4 views
0

Я работаю с Meteor, и я пытаюсь извлечь данные из внешней базы данных (neo4j для этого случая).Meteor.call() с возвращаемым значением, в то время как сервер имеет работу async

Моя проблема в том, когда я 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

Работал как очарование (: –

 Смежные вопросы

  • Нет связанных вопросов^_^