Порядок выполнения Javascript в asp.net - PullRequest
0 голосов
/ 24 ноября 2018

В 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 голосов
/ 25 ноября 2018

Я получаю эту реализацию с подходом обратного вызова:

В 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)
0 голосов
/ 24 ноября 2018

Вы можете попробовать использовать 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();
}());

Источник: Обещание


Если вы используете это действие в старой версии IE.Вы можете использовать функцию обратного вызова:

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

init(function () {
  console.log('continue...');
  
  // doSomething();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...