提交 17b08bb9 编写于 作者: L lang

Use pendingAction instead of setTimeout

上级 0cdda2e6
......@@ -216,12 +216,8 @@ define(function (require) {
}
var fn = throttle.createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType);
// If throttleDelay is 0 or null or undefined, dispatchAction will also be
// called asynchronously, otherwise break the rule that main process should
// not be nested.
setTimeout(function () {
fn(api, brushSelected);
}, 0);
fn(api, brushSelected);
}
function doDispatch(api, brushSelected) {
......
......@@ -174,7 +174,8 @@ define(function (require) {
// In case some people write `window.onresize = chart.resize`
this.resize = zrUtil.bind(this.resize, this);
// Can't dispatch action during rendering procedure
this._pendingActions = [];
// Sort on demand
function prioritySortFunc(a, b) {
return a.prio - b.prio;
......@@ -221,9 +222,11 @@ define(function (require) {
updateMethods.prepareAndUpdate.call(this);
!notRefreshImmediately && this._zr.refreshImmediately();
this[IN_MAIN_PROCESS] = false;
this._flushPendingActions();
!notRefreshImmediately && this._zr.refreshImmediately();
};
/**
......@@ -392,6 +395,7 @@ define(function (require) {
var updateMethods = {
/**
* @param {Object} payload
* @private
......@@ -609,6 +613,8 @@ define(function (require) {
this._loadingFX && this._loadingFX.resize();
this[IN_MAIN_PROCESS] = false;
this._flushPendingActions();
};
var defaultLoadingEffect = require('./loading/default');
......@@ -663,12 +669,18 @@ define(function (require) {
var actionInfo = actionWrap.actionInfo;
var updateMethod = actionInfo.update || 'update';
if (__DEV__) {
zrUtil.assert(
!this[IN_MAIN_PROCESS],
'`dispatchAction` should not be called during main process.'
+ 'unless updateMathod is "none".'
);
// if (__DEV__) {
// zrUtil.assert(
// !this[IN_MAIN_PROCESS],
// '`dispatchAction` should not be called during main process.'
// + 'unless updateMathod is "none".'
// );
// }
// May dispatchAction in rendering procedure
if (this[IN_MAIN_PROCESS]) {
this._pendingActions.push(payload);
return;
}
this[IN_MAIN_PROCESS] = true;
......@@ -718,9 +730,19 @@ define(function (require) {
this[IN_MAIN_PROCESS] = false;
this._flushPendingActions();
!silent && this._messageCenter.trigger(eventObj.type, eventObj);
};
echartsProto._flushPendingActions = function () {
var pendingActions = this._pendingActions;
while (pendingActions.length) {
var payload = pendingActions.shift();
this.dispatchAction(payload);
}
};
/**
* Register event
* @method
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册