Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit 542ae57

Browse files
author
Jacob Wenger
committed
Merge pull request #618 from firebase/kato-617
Fixes #617 - $loaded() triggered too soon
2 parents 58d32d8 + 01cea9c commit 542ae57

File tree

3 files changed

+40
-26
lines changed

3 files changed

+40
-26
lines changed

src/FirebaseArray.js

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -630,43 +630,39 @@
630630
}
631631

632632
var def = $firebaseUtils.defer();
633-
var created = $firebaseUtils.batch(function(snap, prevChild) {
633+
var created = function(snap, prevChild) {
634634
var rec = firebaseArray.$$added(snap, prevChild);
635-
if( rec ) {
636-
$firebaseUtils.resolve(rec).then(function(rec) {
637-
if( rec ) {
638-
firebaseArray.$$process('child_added', rec, prevChild);
639-
}
640-
});
641-
}
642-
});
643-
var updated = $firebaseUtils.batch(function(snap) {
635+
$firebaseUtils.whenUnwrapped(rec, function(rec) {
636+
firebaseArray.$$process('child_added', rec, prevChild);
637+
});
638+
};
639+
var updated = function(snap) {
644640
var rec = firebaseArray.$getRecord($firebaseUtils.getKey(snap));
645641
if( rec ) {
646-
var changed = firebaseArray.$$updated(snap);
647-
if( changed ) {
642+
var res = firebaseArray.$$updated(snap);
643+
$firebaseUtils.whenUnwrapped(res, function() {
648644
firebaseArray.$$process('child_changed', rec);
649-
}
645+
});
650646
}
651-
});
652-
var moved = $firebaseUtils.batch(function(snap, prevChild) {
647+
};
648+
var moved = function(snap, prevChild) {
653649
var rec = firebaseArray.$getRecord($firebaseUtils.getKey(snap));
654650
if( rec ) {
655-
var confirmed = firebaseArray.$$moved(snap, prevChild);
656-
if( confirmed ) {
651+
var res = firebaseArray.$$moved(snap, prevChild);
652+
$firebaseUtils.whenUnwrapped(res, function() {
657653
firebaseArray.$$process('child_moved', rec, prevChild);
658-
}
654+
});
659655
}
660-
});
661-
var removed = $firebaseUtils.batch(function(snap) {
656+
};
657+
var removed = function(snap) {
662658
var rec = firebaseArray.$getRecord($firebaseUtils.getKey(snap));
663659
if( rec ) {
664-
var confirmed = firebaseArray.$$removed(snap);
665-
if( confirmed ) {
660+
var res = firebaseArray.$$removed(snap);
661+
$firebaseUtils.whenUnwrapped(res, function() {
666662
firebaseArray.$$process('child_removed', rec);
667-
}
663+
});
668664
}
669-
});
665+
};
670666

671667
var isResolved = false;
672668
var error = $firebaseUtils.batch(function(err) {

src/utils.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
batch: function(action, context) {
6262
return function() {
6363
var args = Array.prototype.slice.call(arguments, 0);
64-
$rootScope.$evalAsync(function() {
64+
utils.compile(function() {
6565
action.apply(context, args);
6666
});
6767
};
@@ -182,6 +182,16 @@
182182

183183
resolve: $q.when,
184184

185+
whenUnwrapped: function(possiblePromise, callback) {
186+
if( possiblePromise ) {
187+
utils.resolve(possiblePromise).then(function(res) {
188+
if( res ) {
189+
callback(res);
190+
}
191+
});
192+
}
193+
},
194+
185195
//TODO: Remove false branch and use only angular implementation when we drop angular 1.2.x support.
186196
promise: angular.isFunction($q) ? $q : Q,
187197

@@ -210,7 +220,7 @@
210220
},
211221

212222
compile: function(fn) {
213-
return $timeout(fn||function() {});
223+
return $rootScope.$evalAsync(fn||function() {});
214224
},
215225

216226
deepCopy: function(obj) {

tests/unit/FirebaseArray.spec.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,14 @@ describe('$firebaseArray', function () {
417417
expect(spy).toHaveBeenCalledWith(arr);
418418
});
419419

420+
it('should have all data loaded when it resolves', function() {
421+
var spy = jasmine.createSpy('resolve');
422+
arr.$loaded().then(spy);
423+
flushAll();
424+
var list = spy.calls.argsFor(0)[0];
425+
expect(list.length).toBe(5);
426+
});
427+
420428
it('should reject when error fetching records', function() {
421429
var whiteSpy = jasmine.createSpy('resolve');
422430
var blackSpy = jasmine.createSpy('reject');

0 commit comments

Comments
 (0)