我使用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);
});
我希望能够取消此请求'经过一段时间后,例如网络状况不佳,然后调用错误回调。
这可能吗?
答案 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);