jQuery中的执行顺序

时间:2019-06-06 14:30:47

标签: jquery

我在网站上有以下代码:

              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

为什么会这样?以及如何将其更改为正确处理?

1 个答案:

答案 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可能有助于解决异步与同步之间的区别