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?

  • Meteor y mongodg salen del código 1 en debian wheezy
  • Comprender cómo usar NodeJS para crear un back-end simple
  • Usar el module asíncrono para activar una callback una vez que se leen todos los files
  • ¿Cómo se conecta un método que se llama desde un ámbito externo a la function bajo testing?
  • canal de flujo node.js asíncrono o síncrono
  • La tarea "pnetworkingeterminada" no está en tu file gulp
  • ¿Cómo get la stream de Twitter del usuario usando node.js twit?
  • Llamar a la API de Windows desde node.js msg
  • Protable cadena adentro para loop
  • Diferencia entre export const foo, export pnetworkingeterminada foo y module.exports = foo
  • Ejecutando node.js en un puerto que no sea el puerto 80
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.