Tengo la función hasCompleted que devuelve true o false , que está en el archivo del servidor:
Smaples.helpers({ hasCompleted(userId) { // … switch (this.frequency) { case Frequency.ONE_TIME:{ return measures.fetch().every(measure => { console.log( 'measure.hasCompleted(userId)', // true measure.hasCompleted(userId), ); measure.hasCompleted(userId); }); } } // … }, }) Pero cuando se trata del lado del cliente, la función anterior devuelve false .
En el lado del cliente usando useTracker :
const hasCompleted = useTracker( () => sample.hasCompleted(Meteor.myFunctions.getCurrentUserId()), ); console.log( 'survey.hasCompleted(Meteor.myFunctions.getCurrentUserId())', // false survey.hasCompleted(Meteor.myFunctions.getCurrentUserId()), ); console.log('hasCompleted', hasCompleted); // falseLa forma en que accedo a los ayudantes desde el lado del cliente, ¿está mal?
dentro hasCompleted , devuelvo manualmente true y la consola muestra true :
Smaples.helpers({ hasCompleted(userId) { // … switch (this.frequency) { case Frequency.ONE_TIME:{ return true; // changed } // … }, })Además, pensé que si
console.log(measure.hasCompleted(userId))después de regresar se podría cambiar, pero
console.log(measure.hasCompleted(userId)) todavía devuelve true :
Smaples.helpers({ hasCompleted(userId) { // … switch (this.frequency) { case Frequency.ONE_TIME:{ return measures.fetch().every(measure => { measure.hasCompleted(userId); console.log( 'measure.hasCompleted(userId)', // true measure.hasCompleted(userId), ); }); } } // … }, })¿Qué estoy haciendo mal?
Es muy probable que solo pierda un return en la devolución de llamada de su llamada de blocks.every measures.every() :
truesi la funcióncallbackFndevuelve un valor verdadero para cada elemento de la matriz. De lo contrario,false.
Smaples.helpers({ hasCompleted(userId) { // … switch (this.frequency) { case Frequency.ONE_TIME:{ return measures.fetch().every(measure => { console.log( 'measure.hasCompleted(userId)', // true measure.hasCompleted(userId), ); // Make sure to return a truthy value if the item passes your condition return measure.hasCompleted(userId); }); } } // … }, }) Nota: en caso de que su matriz esté vacía (sin documentos), every siempre devuelve true ; ten cuidado si esto no es lo que quieres.
No estoy seguro acerca de su parte del servidor ya que no hay información al respecto.