Angularjs承诺阻止解决方案

时间:2014-12-01 21:09:07

标签: javascript angularjs block promise

我需要一个返回布尔值的函数。第一次调用此函数时,它应该从异步服务(返回promise)加载值,然后缓存它。对此函数的后续调用应返回缓存的值。问题是应该阻止此函数的调用者,直到它获得值。在这种情况下,什么是最好的解决方案?该函数是否应该以任何方式返回一个promise(即是否缓存),并将所有需要阻塞的内容放在promise.then()中。如果这是一个很好的解决方案,我如何在任何一种情况下都返回一个承诺(例如,当它被缓存时)?


下面是一些代码可以更好地说明问题:

function isSomethingStored() {

    if(getFromBrowserStorage() != null) {
        var deferred = $q.defer();
        deferred.resolve(true);
        return deferred.promise;
    }

    var promise = ThirdParty.getSomethingThroughAjax();
    promise.then(function(theSomething) {
        addToBrowserStorage(theSomething);
        return true; 
    });
    return promise;

}

function caller() {
    var promise = isSomethingStored();
    promise.then(function(isReady) {
       //we can continue
    });
}

1 个答案:

答案 0 :(得分:0)

是 - 应该总是返回一个承诺,除非有另一个考虑因素阻止它这样做。这是为了保持一致性 - 如果方法可能是异步的,最好将其视为异步,这样您以后就不会获得时髦的竞争条件。

因为无论如何你都无法阻止,而且变通方法很糟糕 - 我认为无论如何它可能最适合你的问题。只需将所有依赖代码放在then