即使此方法似乎可以正常运行,控制台日志也会显示最终的RESULt是在等待的async / sync之前输出的
submitForm: function() {
console.log("SUBMIT !");
// vee-validate form validation request
const makeValidationRequest = () => {
return this.$validator.validateAll();
};
const validateAndSend = async () => {
const isValid = await makeValidationRequest();
console.log("form validated... isValid: ", isValid);
if (isValid) {
console.log("VALID FORM");
// axios post request parameters
const data = { ... }
};
const axiosConfig = {
headers: { ... }
};
const contactAxiosUrl = "...";
// send axios post request
const makeAxiosPostRequest = async (url, data, config) => {
try {
const result = await axios.post(url, data, config);
console.log("axios post request result: ", result);
return true;
} catch (err) {
console.log("axios post request: ", err.message);
return false;
}
};
this.$store.dispatch("switchLoading", true);
const sent = await makeAxiosPostRequest( contactAxiosUrl, contactAxiosData, axiosConfig );
this.$store.dispatch("switchLoading", false);
return sent;
} else {
console.log("INVALID FORM");
return false;
}
};
const result = validateAndSend();
console.log("RESULT: ", result);
},
the console log is :
SUBMIT !
app.js:3312 RESULT: Promise {<pending>}__proto__: Promisecatch: ƒ catch()constructor: ƒ Promise()finally: ƒ finally()then: ƒ then()arguments: (...)caller: (...)length: 2name: "then"__proto__: ƒ ()[[Scopes]]: Scopes[0]Symbol(Symbol.toStringTag): "Promise"__proto__: Object[[PromiseStatus]]: "resolved"[[PromiseValue]]: false
app.js:3209 form validated... isValid: false
app.js:3291 INVALID FORM
我通常应该得到:
SUBMIT !
form validated... isValid: false
INVALID FORM
最后
RESULT
我的嵌套awaut / sync有什么问题... 想得到反馈
答案 0 :(得分:1)
validateAndSend立即返回承诺。
更改:
const result = validateAndSend();
进入:
const result = await validateAndSend();
(并将async
添加到SubmitForm)
在记录结果之前要等待诺言完成。
答案 1 :(得分:0)
删除makeValidationRequest函数,这是不必要和错误的。试试这个:
submitForm: async function () {
// get form validation status
let formIsValid = await this.$validator.validateAll()
let url = ''
let formData = {}
let config = {
headers: {}
}
const postData = async (url, dta, cnf) => {
try {
// first, show loader
this.$store.dispatch('switchLoading', true)
// then try to get response.data
let {data} = await axios.post(url, dta, cnf)
// if successful, just console it
console.log(`form post successful: ${data}`)
} catch (err) {
// if unsuccessful, console it too
console.log(`error posting data: ${err}`)
} finally {
// successful or not, always hide loader
this.$store.dispatch('switchLoading', false)
}
}
formIsValid && postData(url, formData, config)
// else not required, you can't submit invalid form
}