服务中的方法在执行时未定义,但在登录到控制台时未定义
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 发送时收到