在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
吗?
答案 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)