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.

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?

  • Cómo crear un module nativo para node.js
  • Enviar datos de node.js a Java usando sockets
  • Se superó la cantidad máxima de llamadas al crear una instancia de class dentro de un module
  • Nginx Reverse Proxying a Node.js con Rewrite
  • Ejecución de subtarea sin definición explícita
  • Definición de una versión independiente de la implementación del object global en JavaScript
  • Selenium obtiene el atributo de class de elemento con javascript
  • Learnyounode # 6 lo hace modular: ¿correctos resultados Y arrojando errores al mismo time?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.