我遇到了这个错误,尽管在 MDN 和此处进行了大量研究,但尚未解决它。我正在尝试使用异步和等待,但 JavaScript 不会等待“等待”函数结束。这是:
methods: {
async search (terms, done) {
console.log('1.')
this.filter = this.$refs.chipsInput.input
await this.loadtags()
console.log('3.')
done(this.tagsList)
},
loadtags () {
this.$axios
.get('/api/tags/?id__icontains=&id=&name__icontains=' + this.filter + '&name=&ordering=name&page_size=20')
.then(response => {
console.log('2.', response.data.results)
let temp = response.data.results
this.tagsList = temp.map(obj => {
return {
name: obj.name,
label: obj.name,
value: obj.name,
idField: obj.id
}
})
})
},
这是控制台日志的屏幕截图,其中 JavaScript 打印“3”。 (放置在await调用之后)在'2.'之前:
我做错了什么?已经尝试像这样修改等待:
let foo = await this.loadtags()
并在 loadtags 函数末尾添加“return 0”,但对我不起作用。
您不会从
loadtags
方法返回任何内容,因此代码不会等待。
更改此:
loadtags () {
this.$axios
.get(...
对此:
loadtags () {
return this.$axios
.get(...
async/await
或多或少只是 Promise 的糖衣,所以返回 Promise 会给你在其他方法中等待的东西。
这就是我在 Vue 应用程序中解决此问题的方法。
在用户使用
submitNewTag()
提交新“标签”之前,我需要使用 async theTagExists()
检查它是否已存在于标签列表中。
submitNewTag() {
this.clearError();
this.theTagExists().then((res) => {
if (!res) {
console.log("TAG DOES NOT EXIST, SO ADD IT TO THE DATABASE");
this.saveTagToDatabase();
}
});
},
async theTagExists() {
console.log("CHECKING IF A TAG EXISTS");
await axios.get(`${this.apiUrl}/alltags`).then((res) => {
console.log("CHECKING IS DONE");
this.tagExists = res.data.allTags.some(
res =>
res.name.trim().toLowerCase() ===
this.newTag.tagName.trim().toLowerCase()
);
});
console.log("RETURN THE RESULT");
return this.tagExists;
},