Метод в службе не определен при выполнении, но не при входе в консоль

Метод в службе не определен при выполнении, но не при входе в консоль

01.10.2019 11:30:28 Просмотров 78 Источник

У меня есть 2 класса обслуживания

Класс_пользователей

import axios from "axios";
export default class {
 constructor(){
   this.http= axios.create({baseURL:"/api/users/"});
 }
 getUser(userId){
  return this.http(userId);
 }
}

Бизнес-класс

import axios from "axios";
import AppState from "../utils/appState";
export default class {
 constructor(){
   this.http= axios.create({baseURL:"/api/business/"});
   this.appState = new AppState();
 }

 async getAllBusiness(){
   try{
    let result =await this.http("all");
    this.appState.save('all_business', result.data);
   }catch(ex){
    console.log("AllBusiness",ex);
   }
   return;
 }
}

Когда я импортирую и создаю экземпляр из них в моем компоненте vue, у первого есть все его методы. Но второй теряет свои методы в коде.

Когда я помещаю точку отладки и регистрирую ее, она будет регистрироваться как метод. Но когда я выполняю его, он будет регистрировать ошибку.

 //before export default
 import UserService from "../Services/UserService";
 import BusinessService from "../Services/BusinessService";
 //inside export default
 async created(){
   this.$UserService = new UserService();
   this.$BusinessService = new BusinessService();
   let result = await this.$UserService.getUser(this.id); //=> this one works
   await this.$BusinessService.getAllBusiness(); //=>this one logs  this.$BusinessService.getAllBusiness is not a function
 }

Я также попробовал эти два способа определить метод

 getAllBusiness(){
  return new Promise((resolve,reject)=>{
     this.http("all")
     .then((result)=>{
        this.appState.save('all_business', result.data);
        resolve()
      });
     .catch(()=>{reject()});
   });//also tried with bind(this)
 }

 getAllBusiness=()=>{
  return new Promise((resolve,reject)=>{
     this.http("all")
     .then((result)=>{
        this.appState.save('all_business', result.data);
        resolve()
      });
     .catch(()=>{reject()});
   });//also tried with bind(this)
 }

Использование консоли.лог(это.$BusinessService.getAllBusiness) в отладке покажет ƒ getAllBusiness () {... содержание кода.

Но при наведении на него во время отладки в chrome он будет отображаться неопределенным


https://stackoverflow.com/questions/58180877/method-in-service-is-undefined-when-executing-but-not-when-logging-to-console#comment103270951_58180877
Можете ли вы предоставить образец репозитория GitHub, который воспроизводит проблему?

Ответы - Метод в службе не определен при выполнении, но не при входе в консоль / Method in service is undefined when executing but not when logging to console

brk

01.10.2019 11:35:55

Кажется, проблема в этой строке

.then((result)=>{
        this.appState.save('all_business', result.data);
        resolve()
      });

В этом вы не возвращаетесь. Попробуйте вернуться в результате then.

Также awaitможет потребоваться внутри asyncфункции

https://stackoverflow.com/questions/58180877/method-in-service-is-undefined-when-executing-but-not-when-logging-to-console/58180969#comment102744365_58180969
Я забыл добавить await в мой вопрос. Но это есть в коде. Я буду редактировать, чтобы добавить. Тай за уведомление. Я также попытался дождаться тогдашней части и сделать метод асинхронным. Это не сильно изменилось. Кроме того, выполняя код, я даже не ввожу метод. Поэтому я даже не ударил эту часть, чтобы она дала мне ошибку. Это то, как он определен, что приведет к тому, что preproccessed js не сможет определить метод?
Закрыть X