Lib*_*bra 3 javascript async-await vue.js vue-component vuejs2
我有这个相当简单的Vue
组件(去掉了不必要的部分):
Vue.component('equipment-tree', {
data(){
return {
tree: [],
}
},
template: `
<template>
<div id="equipment_tree"></div>
</template>`,
mounted: function(){
this.getTreeView()
console.log('4. TREE LOADED AND VISIBLE');;
},
methods: {
setUpTree(){
$("#equipment_tree").jstree("destroy");
$('#equipment_tree').jstree({
core : {
data : this.tree,
multiple: false,
themes: {
dots: true
}
},
});
console.log("2. TREE SET UP")
},
getTreeView(){
fetch("myurl /*just a URL */",
{
method: 'GET',
})
.then((response) => response.json())
.then((data) => {
console.log('1. GOT DATA');
this.tree = JSON.parse(data.tree);
this.setUpTree();
console.log('3. SET UP COMPLETE');
})
}
}
})
Run Code Online (Sandbox Code Playgroud)
getTreeView()
在挂载时,我调用从数据库获取数据的方法,将其保存在变量中tree
,然后调用setUpTree()
使用该jstree
库创建树的方法。当我在日志中运行它时,我看到
4. TREE LOADED AND VISIBLE
1. GOT DATA
2. TREE SET UP
3. SET UP COMPLETE
Run Code Online (Sandbox Code Playgroud)
也就是说,流程在调用 后继续getTreeView()
。现在,如果我想等到getTreeView()
完成以便4. TREE LOADED AND VISIBLE
最后真正打印日志该怎么办?
我尝试async/await
如下:我改变了
mounted: function(){
this.getTreeView()
console.log('4. TREE LOADED AND VISIBLE');;
}
Run Code Online (Sandbox Code Playgroud)
进入
mounted: async function(){
await Promise.resolve(this.getTreeView());
console.log('4. TREE LOADED AND VISIBLE');
}
Run Code Online (Sandbox Code Playgroud)
但我得到了和以前一样的结果。如果遵循此问题的答案,则相同。我怎样才能等待该方法getTreeView()
完成?
请注意,这是一个简化的示例,因为我想了解它是如何工作的,而不仅仅是因为日志的顺序很重要。
也尝试等待方法:
async getTreeView(){
await fetch("myurl /*just a URL */",
{
method: 'GET',
})
.then((response) => response.json())
.then((data) => {
console.log('1. GOT DATA');
this.tree = JSON.parse(data.tree);
this.setUpTree();
console.log('3. SET UP COMPLETE');
})
}
}
Run Code Online (Sandbox Code Playgroud)
在已安装的挂钩中:
async mounted(){
await this.getTreeView();
console.log('4. TREE LOADED AND VISIBLE');
}
Run Code Online (Sandbox Code Playgroud)