我有一个方法执行异步ajax请求,以便从服务器(SharePoint)获取一些权限信息,以便通过JS缓存,以便我可以访问CSR。有时需要更长的时间(500毫秒)...并非总是如此,但有时脚本的其余部分加载得如此之快,以至于在完全完成ajax请求之前它需要权限。
是否有一种简单的方法可以延迟方法的输出?我用SetTimeout()尝试了不同的东西,但没有成功。
这是简单的代码......
var Permissions = {
get: function(key) {
while (this.cacheLoaded != true) {
wait(100); //<-- This is what I need
}
return (typeof this[key] != 'undefined' && this[key] == true) ? true : false;
},
cacheLoaded: false,
buildCache: function () {
// load permissions asynchronously by ajax
.
.
.
Permissions.cacheLoaded = true;
}
}
Permissions.buildCache();
.
.
.
doLotsOfOtherStuff();
.
.
.
//Here is the actual call of the get-function:
if (Permission.get('ALOW_DELETE')) {
deleteSomething();
}
当然,我可以将Ajax请求切换为同步。但这会延迟整个脚本加载。所以实际上我想把getter延迟几秒,直到请求结束。
答案 0 :(得分:0)
$-
中_spYield(a,b)
声明为:
init.js
}
答案 1 :(得分:-1)
我将跳过关于这是非常糟糕的练习并始终使用超时和回调的部分。
因为js是单线程的,所以没有很多选项。我会使用一个空循环,但正如@joews所说,这将停止执行,并且cacheLoaded将永远不会设置为true;
while (this.cacheLoaded != true) { /*Stall*/ }
编辑:
回调解决方案:
get: function(key, callback) {
var fn = function {
if(this.cacheLoaded != true)
window.setTimeout(fn, 500);
else
callback((typeof this[key] != 'undefined' && this[key] == true) ? true : false);
};
fn();
}
然后这样称呼它:
Permission.get('ALOW_DELETE', function(result) {if(result) deleteSomething();});