我在网站上有以下代码:
alert('step 1');
// save token if app user:
if (tokenViaApp !== '' ) {
alert('step 2')
$.ajax({
type: "GET",
url: "/includes/notifications/",
data: {
t: tokenViaApp
},
success: function(msg) {
localStorage.token_origin = 'app';
alert('step 3')
}
});
}
alert('step 4')
如果if()
通过了,那么我认为警报应该按照以下顺序进行:
step 1
step 2
step 3
step 4
但是我得到了:
step 1
step 2
step 4
step 3
为什么会这样?以及如何将其更改为正确处理?
答案 0 :(得分:1)
Ajax进程是异步的,这意味着当ajax请求仍在处理时,其他同步功能将运行。
如果您希望命令正确无误,则需要在ajax函数的回调内部执行步骤4。
对此的另一种选择可能是async / await
您可以通过这种方式
const yourApiCall = () => {
Promise.resolve(alert('step 3'))
}
const yourMainFunction = async () => {
alert('step 1')
alert ('step 2')
await yourApiCall()
alert('step 4')
}
yourMainFunction()
This link可能有助于解决异步与同步之间的区别