Как получить javascript ответ в Angular обещании - PullRequest
0 голосов
/ 02 апреля 2020

Я вызываю функцию javascript в компоненте angular. Я включил файл JS в "angular. json", и он отлично работает. Функция JS выполняет запрос HTTP GET и возвращает данные. Проблема в том, что я не могу сказать Angular дождаться ответа JS, чтобы затем извлечь данные.

Это моя JS функция:

function getDataJsFunct(id) {
   var params = {id:id}
   apiClient.getById(params) { console.log('data from JS', result); 
      return result;
   }
}

И это мои TS файлы: в api-services.ts

declare var getDataJsFunct: any;

export class ApiServices {
.
.
   public getAction(id) {
    return new Promise ( resolve => {
      const data = getDataJsFunct(id);
      if (data) {
        console.log('result', data);
        return resolve();
      }

    });
  }
}

в component.service.ts

@Injectable()
export class ComponentService {
  constructor(private serviceProvider: ApiServices) {}
  getDataFromProvider(id) {
    return this.serviceProvider.getAction(id);
  }
}

в component.ts

  ngOnInit() {
  let id = '123456';
  this.componentService.getDataFromProvider(id).then((data: any) => {
     this.dataFromBd = data.Items[0];
  },
  error => {
     console.log('Error in getting Data', error);
  });
}

Программа сбой в "getDataFromProvider (id). ***then*** ((data", потому что getDataFromProvided (id) не определен. Я предполагаю, что мне нужно обещание сказать Angular, что нужно дождаться ответа JS, затем продолжить выполнение. Как и где следует Я делаю это, пожалуйста?

1 Ответ

0 голосов
/ 02 апреля 2020

Я думаю, что ваша проблема в том, что вы не передаете правильное имя переменной в службе.

В настоящее время у вас есть:

@Injectable()
export class ComponentService {
  constructor(private serviceProvider: ApiServices) {}
  getDataFromProvider(urlApi) {
    return this.serviceProvider.getAction(id);
  }
}

Вы звоните this.serviceProvider.getAction(id) с переменной id когда параметр функции равен urlApi.

Вы должны изменить urlApi на id:

@Injectable()
export class ComponentService {
  constructor(private serviceProvider: ApiServices) {}
  getDataFromProvider(id) {
    return this.serviceProvider.getAction(id);
  }
}

Можете ли вы проверить, была ли это проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...