javascript - 另一个函数中的Javascript异步函数
问题描述
我正在尝试在另一个函数中调用异步函数。但是,当我单击网络选项卡时,它不会创建任何发布请求。这里可能是什么问题?
var onComplete = function() {
// CALLING THE ASYNC FUNCTION HERE ---> { NOT WORKING }
updateProfile()
}
async function updateProfile(){
var dataString = {
name: questions[0].answer,
gender: questions[1].answer,
dob: questions[2].answer,
country: questions[3].answer,
interested: questions[4].answer,
};
let xhr = new XMLHttpRequest();
xhr.open("POST", "processes/onboard.php", true);
xhr.onload = ()=> {
if(xhr.readyState === XMLHttpRequest.DONE) {
if(xhr.status === 200) {
// SUCCESS
}
}
}
let formData = new FormData(form);
xhr.send(JSON.stringify(dataString));
}
解决方案
我不是超级专家,但我们可以应用一些建议
- 将函数一分为二以获得更干净和可维护的代码,这意味着两个
async/await
块:
IE
function resolveRequestAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
const result = await resolveRequestAfter2Seconds();
console.log(result);
}
asyncCall();
- 用于
promise.all
获取一系列承诺,并在每个单独的交易详情调用完成后返回一个包含您的交易的数组。
IE
async (transactionKey, page) => {
const api = `https://api/....`;
const response = await axios.get(api);
// create an array of promises and wait for
// all of them to resolve before continuing
const transactions = await Promise.all(
response.data.map(async item => {
const { id, transaction_id } = item;
// get transaction details for each item in the array
const _details = await transactionDetails(transaction_id);
return {
id,
_details,
transactionId: transaction_id,
};
})
);
return transactions;
};
推荐阅读
- android - Android:将数据文件编译到应用程序文件夹中
- ruby-on-rails - 使用参数运行 rails dev:cache
- javascript - facebook graph-api 的“照片”权限阻碍了登录过程
- android-recyclerview - 为什么共享元素转换结束后不会自动删除此共享元素视图?
- http - 对象引用未在 arduino 函数调用中执行函数
- json - 结合 JSON 解码管道,在运行时响应可以是数组或对象
- python - HTML 解析 div.p.ol 在 Python 中返回空白
- postgresql - Cloud SQL Postgres - 管理数据库用户,最佳实践?
- python - 如何将带有字符串列表的行转换为多列
- python - 熊猫不删除重复项