Javascript 链接传递信息的jquery ajax调用的最佳方法
我正在进行几个异步ajax调用,这些调用必须按照特定的顺序执行,并且必须相互传递信息。以下是我当前方法的MWE。即使有三个API调用,这也有点像噩梦。使用5,不可能排列错误工作流或移动函数(屏幕空间也用完了)。有没有更好的方法来实现同样的结果Javascript 链接传递信息的jquery ajax调用的最佳方法,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在进行几个异步ajax调用,这些调用必须按照特定的顺序执行,并且必须相互传递信息。以下是我当前方法的MWE。即使有三个API调用,这也有点像噩梦。使用5,不可能排列错误工作流或移动函数(屏幕空间也用完了)。有没有更好的方法来实现同样的结果 /* * API Call to get user */ $.ajax({ type: 'POST', url: `robin.hood/get_user`, data: JSON.stringify({"name&q
/*
* API Call to get user
*/
$.ajax({
type: 'POST',
url: `robin.hood/get_user`,
data: JSON.stringify({"name":"Joe Dirt"}),
headers: {Authorization: 'Bearer ' + token},
datatype: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data, text_status, jq_xhr) {
/*
* Assume one user is returned only
*/
let user_id = data;
/*
* API Call to get the bank balance of the user
*/
$.ajax({
type: 'POST',
url: `robin.hood/get_user_balance`,
data: JSON.stringify({"user_id":user_id}),
headers: {Authorization: 'Bearer ' + token},
datatype: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data, text_status, jq_xhr) {
/*
* We record the balance
*/
let balance = data;
/*
* We invest in Gamestop stock
*/
$.ajax({
type: 'POST',
url: `robin.hood/buy_gamestop_stock`,
data: JSON.stringify({"user_id":user_id, "amount":balance}),
headers: {Authorization: 'Bearer ' + token},
datatype: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data, text_status, jq_xhr) {
/* STONKS!!! */
});
},
error: function (jq_xhr, text_status, error_thrown) {
/* NO STONKS */
}
});
},
error: function (jq_xhr, text_status, error_thrown) {
/* NO STONKS */
}
});
},
error: function (jq_xhr, text_status, error_thrown) {
/* NO STONKS */
}
});
相关但不太清楚的问题:
$.ajax
返回一个Thenable,这意味着您可以在异步
函数中等待它,这比嵌套回调更容易管理:
异步函数运行(){
试一试{
const user=wait$.ajax({
键入:“POST”,
url:`robin.hood/get\u user`,
数据:JSON.stringify({
“姓名”:“乔·迪特”
}),
标题:{
授权:“持票人”+代币
},
数据类型:“json”,
contentType:'application/json;charset=utf-8',
})
const balance=await$.ajax({
// ...
})
const data=await$.ajax({
// ...
})
/*石头*/
}捕获(e){
/*没有石头*/
}
}
run()
我知道const user=…
部分后面的内容基本上取代了success:…
我遇到的问题是,例如,如果我有两个API调用,并且两个调用都可以抛出一个,例如ID\u NOT\u FOUND错误,我如何用try…catch来处理这个问题?我是否可以删除“尝试并使用ajax”success:…error
?我不知道如果将异步和回调混合在一起会发生什么,但这可能不是最好的主意,最好只使用一个。我将每个api调用放在自己的异步函数中(getUser
,getBalance
,等等),每个函数都有自己的try/catch用于错误处理。然后您就可以constuser=await getUser();const balance=等待getBalance(用户)代码>。