【发布时间】:2021-12-31 21:42:22
【问题描述】:
我想使用异步函数“submitToTheOthers”,我想从let items = [] 开始,它会在“submitToTheOthers”完成后运行。但它并没有等到“submitToTheOthers”完成。可能是因为“submitToTheOthers”中没有等待。因此,我想在 'submitToTheOthers' 中做出 for 声明,就像 await 一样,但我不知道如何。
我可以在“updateGeneralInfoToOther”处使用 await,但后来我无法运行 几乎同时为所有服务器更新GeneralInfoToOther,如果其中一个服务器出现错误,那么我无法在for语句中从服务器运行。我想使用 await 或 promise 之类的声明或更大的范围。
什么是让它等待'submitToTheOthers'的好方法?
ps)我希望了解旧语法,因为我可能需要在 Internet Explorer XD XD TT 上使用它
Settings.vue
<template>
<div>
<button class="point" @click="submitTotalServer()">submitTotalServer</button>
</div>
</template>
<script>
import {
updateGeneralInfoToOther,
} from '@/api/settings'
export default {
data() {
return {
serverNames: ['a server', 'b server'],
idxs: [0,1],
serverFullAddress: ['http://localhost:12345','http://randomUrl:12345' ]
serverResCheck: [],
}
},
methods: {
async submitTotalServer() {
await this.submitToTheOthers() // this function
let items = [] // here
for(let i=0; i< this.idxs.length ; i++){
if(!this.serverResCheck[i]){
items.push(this.serverNames[i])
}
}
if(items == []){
alert('saved in all servers')
}else{
alert(`[${items}] Error`)
}
},
async submitToTheOthers(){
let data = {
data : 'test',
}
for (let i=0; i< this.idxs.length ;i++){
updateGeneralInfoToOther(1, data, this.serverFullAddress[i]').then((res) => // axios function
{
if (res.status == 200) {
this.serverResCheck[i]= true
}else{
this.serverResCheck[i]= false
}
})
}
}
},
</script>
api/settings.js
// ...
export function updateGeneralInfoToOther(id, data, serverAddress) {
axios.defaults.timeout = 5000;
data.serverAddress = serverAddress
return axios.post(`/api/settings/generalToOther/${id}`, data)
}
// ...
【问题讨论】:
-
可能是因为你没有退货?
-
看link
标签: javascript vue.js