Я пытаюсь настроить setTimeout внутри переключателя, который находится внутри foreach, внутри функции ...
TypeError: undefined не является объектом (оценка this.Data)
я пытался
import { DataProvider } from '../xml-provider';
constructor(private Data: DataProvider) { }
items = this.Data.xmldata['step']; //XML turned into array using
initiateStepActions(){
var actionsToTake = this.items[this.currentStep]['timed_actions'];
if (actionsToTake){
this.items[this.currentStep]['timed_actions'][0]['action'].forEach(function(foundAction){
switch (type) {
case 'customerchat':
var MesgObject = {text : foundAction['_']};
//setTimeout(() => {this.Data.broadcastCustomerChatMesg(MesgObject)}, Number(foundAction['$']['showAtSecond']));
//setTimeout (() => this.Data.broadcastCustomerChatMesg(MesgObject), Number(foundAction['$']['showAtSecond']));
//setTimeout ( (this.Data.broadcastCustomerChatMesg(MesgObject)).bind(this), Number(foundAction['$']['showAtSecond']));
//setTimeout (this.Data.broadcastCustomerChatMesg(MesgObject), Number(foundAction['$']['showAtSecond']));
setTimeout (function(this) { this.Data.broadcastCustomerChatMesg(MesgObject)}, Number(foundAction['$']['showAtSecond']));
TypeError: undefined is not an object (evaluating 'this.Data.broadcastCustomerChatMesg')
break;
case 'supportchat':
console.info('send a support chat message ');
break;
default:
console.info('defaulted');
} //end switch
});// end foreach
}
}
Все они получают неопределенную ошибку.
Не могли бы вы добавить окружающий foreach, пожалуйста?
добавленный код, надеюсь, имеет больше смысла.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда ты пишешь
.forEach(function(foundAction){
this больше не ссылается на ваш класс, а на анонимную функцию. Вы должны использовать функцию стрелки
.forEach(fundAction => {
И сделайте то же самое в setTimeout, чтобы не передавать ссылку на this.
он работает .forEach ((foundAction) => {а затем setTimeout (() => {сделал свое дело!
Разместите больше кода, чтобы мы имели некоторое представление о контексте вызова (или о том, что вы ожидаете от него).