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?

  • No se puede acceder correctamente a la variable de entorno NODE_ENV, ¿se trata de un error con node.js?
  • ¿Por qué se deja más lento que var en un bucle for en nodejs?
  • Está bien para agregar una ruta a Node.js Express mientras escuchas?
  • detalles de cierres en JavaScript y funciones anónimas
  • nodemon No se puede encontrar el module '/path/to/project/home/index.js'
  • Socket.io cómo enumerar los sockets en una sala por sobrenombre
  • node.js - no puedo reproducir la respuesta progresiva del server
  • consumir llamadas API JSon a través de TVJS-tvOS
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.