服务中的方法在执行时未定义,但在登录到控制台时未定义

Posted

技术标签:

【中文标题】服务中的方法在执行时未定义,但在登录到控制台时未定义【英文标题】:Method in service is undefined when executing but not when logging to console 【发布时间】:2020-01-30 12:21:21 【问题描述】:

我有 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)
 

在调试中使用 console.log(this.$BusinessService.getAllBusiness) 将显示 ƒ getAllBusiness() ... 代码的内容。

但在 chrome 中调试时将鼠标悬停在它上面会显示未定义

【问题讨论】:

您能否提供一个重现问题的示例 GitHub 存储库? 【参考方案1】:

看来问题出在这一行

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

在这种情况下,你不会回来。尝试从then 返回结果。

await 也可能需要在 async 函数内

【讨论】:

我忘了在我的问题中添加等待。但它在代码中。我会编辑添加。 Ty 为通知。我还尝试等待 then 部分并使方法异步。它没有太大变化。此外,执行代码我什至不输入方法。所以我什至没有因为它给我一个错误而点击那部分。是不是它的定义方式会导致预处理的js无法定义方法?

以上是关于服务中的方法在执行时未定义,但在登录到控制台时未定义的主要内容,如果未能解决你的问题,请参考以下文章

通过 FCM 发送时未收到推送通知,但在 IOS 上通过 APN 发送时收到

隐藏时未调用委托方法

为啥在尝试读取记录集字段时未定义访问 vba 抛出子或函数?

Ajax 发布返回成功但在调试时未在 VS 中达到断点

执行删除规则时未调用自定义对多关系访问器方法

直接或从 Makefile 执行 Python 程序时未找到模块,但在使用“python”运行时工作正常