asp.net中的JavaScript执行顺序

时间:2018-11-24 11:12:27

标签: javascript jquery asp.net javascript-events

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吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Promise类:

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();
});

答案 1 :(得分:0)

我最终通过回调方法实现了这一实现:

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)