javascript - Pérdida de alcance dentro de un .then después de llamar a una función
Tengo una aplicación Angular4 que llama a un servicio para publicar un registro usando mi API.
Cuando el valor de theAssignmentChanged es true, enviará un mensaje de texto. Cuando es false, simplemente lo omite.
En el siguiente código, el console.log muestra la bandera theAssignmentChagned como true, pero el console.log dentro de la llamada al servicio la muestra como false.
Estoy perdiendo el alcance de this y he buscado en Stack Exchange y no he encontrado nada que explique por qué.
¿Por qué estoy perdiendo el alcance de this dentro de mi llamada a FService?
console.log("Before : " + myForm.controls.theAssignmentChanged.value);
this.FService.reqExec(formToPost, 'service', action)
.then( data => {
this.notify.success('Success','DB Update Successful!');
console.log(" After : " + myForm.controls.theAssignmentChanged.value);
if (myForm.controls.theAssignmentChanged.value) {
this.messageService.sendMessage(telToText, 'Hi, the service has been changed, please review the changes.');
}
this.closeModal('services');
resolve(data);
})
.catch(errorCode => {
console.log(errorCode);
reject(errorCode);
});
} else {
this.closeModal('services');
resolve(data);
}
});
})
esto es diferente a que JavaScript acceda a `this` dentro de `then` porque lo intenté y no funcionó, y además... cuando esta función no estaba en un servicio, funcionaba bien. Solo empezó a suceder cuando la saqué del componente padre y la coloqué dentro del servicio hijo.
Gracias a todos... lo que estaba ocurriendo era un cambio en el alcance de esto. Y sí, esto.notify funcionó; lo que estaba ocurriendo era que una condición asíncrona sucedió después de la llamada al procedimiento donde el alcance de esto se volvió nulo debido a una interrupción en un procedimiento posterior. Simplemente coincidió en el tiempo justo después de esto.notify y antes de la siguiente línea. Agregué async await y ahora funciona normalmente.