javascript - 为什么这个 VueJS 代码是按这个顺序执行的?
问题描述
我使用 VueJS 编写了以下代码。
我想将 axios 响应存储在会话存储中,这样如果我已经在会话存储中拥有所需的信息(应该包含对象数组),我就可以避免发出 http 请求。
问题是 Vue 组件似乎同时在执行代码,而我的会话存储被第二个组件覆盖,依此类推..
export default {
data() {
return {
isHidden: true,
user: {},
paises: {},
letter: "",
userColor: "#000",
top: 0,
left: 0,
};
},
props: ["usuId"],
methods: {
getAll: async function () {
let usersData = [];
if (sessionStorage.getItem("usersData")) {
usersData = JSON.parse(sessionStorage.getItem("usersData"));
}
console.log("primer log", usersData, "length", usersData.length);
const found = usersData.find((e) => e.id == 70);
console.log("found:", found);
if (found === undefined) {
//Si no está en el array traigo los datos y lo guardo
console.log("No está en el array o el array está vacío");
await $.ajax({
url: "/profile-card-api",
data: { usu_id: this.usuId },
method: "get",
}).done(function (response) {
console.log("response", response);
usersData.push(JSON.parse(response));
// Save data to sessionStorage
sessionStorage.setItem("usersData", JSON.stringify(usersData));
});
} else {
//si el usuario está en el array uso esos datos para mostrar
console.log("Está en el array", usersData);
}
/*
console.log(await this.getUserData(this.usuId))
this.user = JSON.parse(this.getUserData(this.usuId));
this.paises = this.user.paises_disponibles.split(",");
this.letter = this.user.name.charAt(0).toUpperCase();
this.userColor =
this.user.role == "admin"
? "#f93943"
: this.user.role == "callcenter"
? "#39ba4e"
: "#3e8ddd";
*/
},
mouseOver(event) {
this.isHidden = false;
this.top = event.clientY + 10;
this.left = event.clientX + 10;
},
},
mounted() {
this.getAll();
},
};
我在控制台中得到以下信息
primer log [] length 0
profileCard.vue?63d3:125 found: undefined
profileCard.vue?63d3:129 No está en el array o el array está vacío
profileCard.vue?63d3:121 primer log [] length 0
profileCard.vue?63d3:125 found: undefined
profileCard.vue?63d3:129 No está en el array o el array está vacío
2 profileCard.vue?63d3:137 response
如您所见,代码一直执行,直到控制台中显示字符串“No está en el array o el array está vacío”,然后停止执行其他组件,然后您才会得到当时无用的响应。
我错过了什么?先感谢您。
解决方案
推荐阅读
- android - android.os.TransactionTooLargeException: 数据包大小 3354884 字节
- python - Python - 如何将实例变量作为隐式参数传递给方法并使用递归方法
- json - Serilog.Sinks.Postgresql:从 appsettings.json 读取配置
- consul - 带有 traefik 的外部和内部负载均衡器
- python - removing the last punctuation character
- c# - 如何使用 Server.MapPath 将文件上传到映射在我的计算机上的服务器
- android-studio - Android studio 3.1.2 创建新项目 gradle 同步失败
- android - Unable to connect Bluetooth in nougat socket closed
- python - 在 tkinter 中关闭窗口之前执行某个命令
- android - 在某些设备中未显示 React 本机 Firebase 通知提示