Tengo subprojects de objetos anidados con una propiedad de tipo matriz: userEstimates de usuario con objeto (s) Estimate .
Estoy buscando iterar a través de userEstimates y enviar una búsqueda/promesa a una matriz sin llamarla.
principal (dentro de la función async )
await subproject.getUserEstimates(true); let stack = []; subproject.userEstimates.forEach(ue => stack.push(ue.fetchAvailableRates) ); console.log(stack); // 3) [ƒ, ƒ, ƒ] await Promise.all(stack); fillForm(subproject); sin embargo, los atributos en el subproject no están definidos al llamar a fillForm
definición de función para fetchAvailableRates :
fetchAvailableRates = () => { this.availableRates = fetch(...) .then((resp) => { if (resp.ok) return resp.json(); else throw new Error("Something went wrong"); }) .then((r) => { ... return { Rate.get(), // returns class ... }; }) .catch((e) => { console.error(e); }); };EDITAR: cambié mi redacción de la cola a la pila, ya que estoy tratando de ejecutar todas las solicitudes a la vez, y no me importa el orden
Su definición para fetchAvailableRates usa this , pero cuando se refiere a la función de un objeto sin llamarlo (como stack.push(ue.fetchAvailableRates) ), pierde la referencia a this y simplemente se convierte en una función.
Para hacer referencia a una función que llama a ue.fetchAvailableRates en la instancia de ue en ese momento, debe llamar a () => ue.fetchAvailableRates() o ue.fetchAvailableRates.bind(ue) .
Ese no es el único cambio que necesitaría hacer Promise.all() no acepta funciones, solo promesas, por lo que la llamada correcta probablemente sea hacer que ue.fetchAvailableRates() devuelva la Promesa y la agregue a la pila.