diff --git a/lib/modules/database/reference.js b/lib/modules/database/reference.js index 740c67de..5cb01d76 100644 --- a/lib/modules/database/reference.js +++ b/lib/modules/database/reference.js @@ -257,15 +257,17 @@ export default class Reference extends ReferenceBase { const newRef = new Reference(this._database, `${this.path}/${generatePushID(this._database.serverTimeOffset)}`); const promise = newRef.set(value); - // todo 'ThenableReference' - return promise - .then(() => { - if (isFunction(onComplete)) return onComplete(null, newRef); - return newRef; - }).catch((error) => { - if (isFunction(onComplete)) return onComplete(error, null); - return error; - }); + // if callback provided then internally call the set promise with value + if (isFunction(onComplete)) { + return promise + .then(() => onComplete(null, newRef)) + .catch(error => onComplete(error, null)); + } + + // otherwise attach promise to 'thenable' reference and return the + // new reference + newRef._setThenable(promise); + return newRef; } /** @@ -656,8 +658,7 @@ export default class Reference extends ReferenceBase { INTERNALS.SharedEventEmitter.removeAllListeners(`${this.makeQueryKey()}:cancelled`); } } else { - - + // todo remove all associated event subs if no event type && no orignalCb } }