Meteor.call Callback Function Returns Undefined

Tengo este código en el cliente:

var Checklist = { title: this.title, belongs_to: this.belongs_to, type: this.type, items: this.items }; Meteor.call( 'create_checklist', Checklist, function(error,result){ console.log('error',error,'result',result); // if(!error) { // Router.go('/checklist/'+response); // } } ); 

Y esto en el server:

 create_checklist: function(Checklist) { Checklists.insert( { title: Checklist.title, belongs_to: Checklist.belongs_to, type: Checklist.type, items: Checklist.items }, function(error,id){ console.log(error,id); if(id) { return id; } else { return error; } } ); }, 

El Meteor.call pasa la información con éxito al server, a medida que se crea la list de verificación. Puedo ver en la console del server el ID de la nueva list de verificación. Sin embargo, el cliente solo ve undefined tanto por error como por resultado.

  • ¿Cómo se modifican las routes de files en la aplicación Angular?
  • No se puede acceder a la function Cerrar window en la aplicación de escritorio utilizando el nodo js
  • String.replace con / y \ en Nodejs diferente de Chrome?
  • Nodejs con socket.io en heroku
  • Error de solución de problemas: conecte ECONNREFUSED en el tutorial stream-adventure de nodejs
  • Manera limpia de mapear una matriz en node.js o JavaScript
  • Enviar un constructor como parámetro
  • ¿Afirmar el uso del module en nodejs?
  • 3 Solutions collect form web for “Meteor.call Callback Function Returns Undefined”

    No devuelve resultado en su método de server. No puede devolver valores de la callback. Devuelve solo el resultado de Checklists.insert:

     create_checklist: function(Checklist) { return Checklists.insert( { title: Checklist.title, belongs_to: Checklist.belongs_to, type: Checklist.type, items: Checklist.items }, function(error,id){ console.log(error,id); if(id) { return id; } else { return error; } } ); }, 

    De acuerdo con los documentos de Meteor , insert method devuelve ID del documento insertado.

    En el server, si no proporciona una callback, inserte bloques hasta que la database reconozca la escritura, o genere una exception si algo salió mal.

    No necesita devolver nada, cambie el método del meteoro a esto.

     create_checklist: function(Checklist) { Checklists.insert( { title: Checklist.title, belongs_to: Checklist.belongs_to, type: Checklist.type, items: Checklist.items } ); } 

    La meteor.call callback sabe cómo manejar la respuesta del server. Es por eso que está utilizando el error result . Si algo falla en el método, el server emitirá un error y la llamada al meteoro fallará.

    Simplificado al mínimo:

     create_checklist: function(Checklist) { return Checklists.insert(Checklist); } 

    Su código de cliente debería ver el _id del documento insertado como result

    Sin embargo, tengo que preguntar, ¿por qué ? Debería poder hacer var id = Checklists.insert(Checklist) en el cliente si la colección está publicada y dejar que Meteor maneje la synchronization con el server. ¿Las Checklists no están publicadas en el cliente?

    Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.