From 97dfe2e8d75666e4f22a75ed97ed6aa00b368b0a Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Mon, 20 Jan 2020 11:34:57 +0200 Subject: [PATCH] update bull --- client/lib/bull.js | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/client/lib/bull.js b/client/lib/bull.js index 5bcae019bc..0b28a6867a 100644 --- a/client/lib/bull.js +++ b/client/lib/bull.js @@ -810,31 +810,57 @@ var Bull = Bull || {}; */ createView: function (key, viewName, options, callback, wait) { this.clearView(key); - return new Promise(function (resolve) { + + this._viewPromiseHash = this._viewPromiseHash || {}; + + var self = this; + + var promise = this._viewPromiseHash[key] = new Promise(function (resolve, reject) { + var promise = this; + var context = self; + wait = (typeof wait === 'undefined') ? true : wait; - var context = this; + if (wait) { - this.waitForView(key); + self.waitForView(key); } options = options || {}; if (!options.el) { - options.el = this.getSelector() + ' [data-view="'+key+'"]'; + options.el = self.getSelector() + ' [data-view="'+key+'"]'; } - this._factory.create(viewName, options, function (view) { + + self._factory.create(viewName, options, function (view) { + var previusView = this.getView(key); + if (previusView) { + previusView.cancelRender(); + } + + delete this._viewPromiseHash[key]; + + if (promise._isToReject) { + reject(); + return; + } + var isSet = false; if (this._isRendered || options.setViewBeforeCallback) { this.setView(key, view); isSet = true; } + if (typeof callback === 'function') { callback.call(context, view); } + resolve(view); + if (!this._isRendered && !options.setViewBeforeCallback && !isSet) { this.setView(key, view); } - }.bind(this)); - }.bind(this)); + }.bind(self)); + }); + + return promise; }, /** @@ -873,6 +899,12 @@ var Bull = Bull || {}; this.nestedViews[key].remove(); delete this.nestedViews[key]; } + + this._viewPromiseHash = this._viewPromiseHash || {}; + var previousPromise = this._viewPromiseHash[key]; + if (previousPromise) { + previousPromise._isToReject = true; + } }, /**