Javascript asp.net 中的执行顺序

Javascript execution order in asp.net

Master.aspx 我有一些初始化代码

app.asynInit(
 getData();// this needs to execute first
) 

然后在其中一个自定义控件中我有一些逻辑

doSomethingLater() // this needs to wait for the getData()

我不确定确保 doSomething() 始终在 app.asynInit()

之后执行的最佳方法是什么

我目前的解决方案是使用jQuery的自定义事件。

app.asynInit() // this needs to execute first
$(document).trigger('initCompleted')

$(document).on('initCompleted',function(){ document() // this needs to wait for the getData()})

它似乎有效。但是还有更好的选择吗?我应该在这里使用 document 吗?

你可以试试Promise class:

var initAsync = function () {
  var promise = new Promise(function (done) {
    setTimeout(function () {
      console.log('DONE');
      
      done();
    }, 3000);
  });
  
  return promise;
};

(async function () {
  await initAsync();
  
  console.log('continue...');

  // doSomething();
}());

来源:Promise


如果您在旧版本的 IE 上使用此操作。您可以使用回调函数:

var init = function (callback) {
  setTimeout(function () {
    console.log('DONE');
    
    callback();
  }, 3000);
};

init(function () {
  console.log('continue...');
  
  // doSomething();
});

我最终用回调方法完成了这个实现:

Master.aspx:

app.asynInit(
    getData();// this needs to execute first
    window.isDataGet = true;
) 

function onDataGet(cb){
    if(window.isDataGet )
        cb();
    else
        setTimeout(onDataGet,100)
}

在自定义控件中:

onDataGet(//callback function here)