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

Commit c7ad7d8

Browse files
committed
Merge pull request #596 from jamestalmage/added-returns-a-promise
Proposal: Allow extenders of firebaseArray.$$added to return promises.
2 parents 878ca09 + 15cf871 commit c7ad7d8

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/FirebaseArray.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,11 @@
634634
var created = $firebaseUtils.batch(function(snap, prevChild) {
635635
var rec = firebaseArray.$$added(snap, prevChild);
636636
if( rec ) {
637-
firebaseArray.$$process('child_added', rec, prevChild);
637+
$firebaseUtils.resolve(rec).then(function(rec) {
638+
if( rec ) {
639+
firebaseArray.$$process('child_added', rec, prevChild);
640+
}
641+
});
638642
}
639643
});
640644
var updated = $firebaseUtils.batch(function(snap) {

tests/unit/FirebaseArray.spec.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,30 @@ describe('$firebaseArray', function () {
8383
expect(spy).toHaveBeenCalledWith(arr.$ref().child(lastId));
8484
});
8585

86+
it('should wait for promise resolution to update array', function () {
87+
var queue = [];
88+
function addPromise(snap, prevChild){
89+
return new $utils.promise(
90+
function(resolve) {
91+
queue.push(resolve);
92+
}).then(function(name) {
93+
var data = $firebaseArray.prototype.$$added.call(arr, snap, prevChild);
94+
data.name = name;
95+
return data;
96+
});
97+
}
98+
arr = stubArray(null, $firebaseArray.$extend({$$added:addPromise}));
99+
expect(arr.length).toBe(0);
100+
arr.$add({userId:'1234'});
101+
flushAll(arr.$ref());
102+
expect(arr.length).toBe(0);
103+
expect(queue.length).toBe(1);
104+
queue[0]('James');
105+
$timeout.flush();
106+
expect(arr.length).toBe(1);
107+
expect(arr[0].name).toBe('James')
108+
});
109+
86110
it('should reject promise on fail', function() {
87111
var successSpy = jasmine.createSpy('resolve spy');
88112
var errSpy = jasmine.createSpy('reject spy');

0 commit comments

Comments
 (0)