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:
- Implementando mónadas en JavaScript
- Las classs de JavaScript con getter y setter causan RangeError: se excedió el tamaño máximo de la stack de llamadas
- Lienzo de browser cruzado usando nodeJS sin firma encontrada para la function
- Rompí mi promise
- node.js - Accediendo al código de salida y al stderr de un command del sistema
- No se puede GET /test.html cuando se ejecuta el server Node.js
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?