在Firebase中设置.once的超时

时间:2014-07-22 10:57:30

标签: javascript firebase

我使用Firebase的.once方法从数据库中获取一次性值 - 即获取用户名。

userRef.once('value', function (data) {
    console.log('gots it')
    deferred.resolve(data.val());
}, function(error) {
    console.log('error, maybe it timed out');
    deferred.reject(error);
});

我希望能够取消此请求'经过一段时间后,例如网络状况不佳,然后调用错误回调。

这可能吗?

2 个答案:

答案 0 :(得分:3)

我意识到这不是OP问题的答案,在任何情况下这都是一年之久。但我只是遇到了同样的问题(但使用离子框架)。所以万一它对任何人都有用,这就是我想出来的。

var timeoutOnce = function(ref, eventType) {
    var deferred = $q.defer();
    $timeout(function() {
        deferred.reject("TIMEOUT");
    }, TIMEOUT_PERIOD)
    ref.once(eventType, 
        function(data) {
            deferred.resolve(data);
        }, 
        function(error) {
            deferred.reject(error);
        }
    );
    return deferred.promise;
}

所以这个电话:

ref.once('value', success, failure);

变为:

timeoutOnce(ref, 'value').then(success, failure);

似乎适合我。显然将TIMEOUT_PERIOD设置为您想要的任何内容。

答案 1 :(得分:2)

暂时我正在以时尚方式攻击这个:

        var hasTimedOut = false,
            timeout;

        timeout = $window.setTimeout(function() {
            hasTimedOut = true;
            deferred.reject({
                timedOut: true
            });
        }, 10000);

        userRef.once('value', function (data) {
            if (!hasTimedOut) {
                clearTimeout(timeout);
                deferred.resolve(data.val());
            }
        }, deferred.reject);