diff --git a/src/client.js b/src/client.js index 679b34d53..9ebdfd2d6 100644 --- a/src/client.js +++ b/src/client.js @@ -3870,7 +3870,7 @@ MatrixClient.prototype.setRoomMutePushRule = function(scope, roomId, mute) { } else if (!hasDontNotifyRule) { // Remove the existing one before setting the mute push rule // This is a workaround to SYN-590 (Push rule update fails) - deferred = Promise.defer(); + deferred = utils.defer(); this.deletePushRule(scope, "room", roomPushRule.rule_id) .done(function() { self.addPushRule(scope, "room", roomId, { diff --git a/src/store/indexeddb-remote-backend.js b/src/store/indexeddb-remote-backend.js index 920739b6e..270bef961 100644 --- a/src/store/indexeddb-remote-backend.js +++ b/src/store/indexeddb-remote-backend.js @@ -17,6 +17,7 @@ limitations under the License. import Promise from 'bluebird'; import logger from '../logger'; +import {defer} from '../utils'; /** * An IndexedDB store backend where the actual backend sits in a web @@ -152,7 +153,7 @@ RemoteIndexedDBStoreBackend.prototype = { // the promise automatically gets rejected return Promise.resolve().then(() => { const seq = this._nextSeq++; - const def = Promise.defer(); + const def = defer(); this._inFlight[seq] = def; diff --git a/src/utils.js b/src/utils.js index 4bea67129..f4887ac32 100644 --- a/src/utils.js +++ b/src/utils.js @@ -714,3 +714,16 @@ module.exports.ensureNoTrailingSlash = function(url) { module.exports.sleep = (ms, value) => new Promise((resolve => { setTimeout(resolve, ms, value); })); + +// Returns a Deferred +module.exports.defer = () => { + let resolve; + let reject; + + const promise = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + + return {resolve, reject, promise}; +};