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)
在 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)