首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:同步等待/延迟方法

Javascript:同步等待/延迟方法
EN

Stack Overflow用户
提问于 2015-10-30 06:46:30
回答 2查看 753关注 0票数 0

我有一个方法,它执行一个异步ajax请求,从服务器(SharePoint)获取一些权限信息,通过JS缓存,这样我就可以为CSR访问它了。有时这需要更长的时间(500ms)……并不总是如此,但有时脚本的其余部分加载得如此之快,以至于在ajax请求完全完成之前需要权限。

有没有一种简单的方法来延迟方法的输出?我用SetTimeout()尝试了不同的方法,但都不起作用。

以下是简化的代码。

代码语言:javascript
复制
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延迟几毫秒,直到请求完成。

EN

回答 2

Stack Overflow用户

发布于 2015-11-01 04:38:55

init.js中有一个_spYield(a,b),声明为:

代码语言:javascript
复制
function _spYield(b, a) {
if (a > 0)
    window.setTimeout(function() {
        _spYield(b, a - 1)
    }
    , 0);
else
    b()

}

票数 0
EN

Stack Overflow用户

发布于 2015-10-30 06:52:10

我将跳过关于这是非常糟糕的做法的部分,并始终使用超时和回调。

因为js是单线程的,所以您没有太多的选择。我会使用一个空循环,但正如@joews所说,这将使执行停止,并且cacheLoaded永远不会被设置为真;

代码语言:javascript
复制
while (this.cacheLoaded != true) { /*Stall*/ }

编辑:

回调方案:

代码语言:javascript
复制
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();      
    }

然后这样叫它:

代码语言:javascript
复制
Permission.get('ALOW_DELETE', function(result) {if(result) deleteSomething();});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33425960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档