Match-id-bb9faf6ae4ba719bc43b183906c421855724b0b7
This commit is contained in:
parent
f3c0cf9a05
commit
8c13846d2d
|
@ -19,14 +19,15 @@ import {callRenderQueueImmediate} from '../renderer/taskExecutor/RenderQueue';
|
|||
import {runAsyncEffects} from '../renderer/submit/HookEffectHandler';
|
||||
import {isPromise} from '../renderer/ErrorHandler';
|
||||
|
||||
interface Thenable {
|
||||
then(resolve: (val?: any) => void, reject: (err: any) => void): void;
|
||||
}
|
||||
|
||||
// act用于测试,作用是:如果fun触发了刷新(包含了异步刷新),可以保证在act后面的代码是在刷新完成后才执行。
|
||||
function act(fun) {
|
||||
function act(fun: () => void | Thenable): Thenable {
|
||||
const funRet = asyncUpdates(fun);
|
||||
|
||||
callRenderQueueImmediate();
|
||||
runAsyncEffects();
|
||||
// effects可能产生刷新任务,这里再执行一次
|
||||
callRenderQueueImmediate();
|
||||
callRenderQueue();
|
||||
|
||||
// 如果fun返回的是Promise
|
||||
if (isPromise(funRet)) {
|
||||
|
@ -38,13 +39,11 @@ function act(fun) {
|
|||
if (typeof setImmediate === 'function') {
|
||||
// 通过setImmediate回调,用于等待业务的setTimeout完成
|
||||
setImmediate(() => {
|
||||
callRenderQueueImmediate();
|
||||
runAsyncEffects();
|
||||
callRenderQueue();
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
callRenderQueueImmediate();
|
||||
runAsyncEffects();
|
||||
callRenderQueue();
|
||||
resolve();
|
||||
}
|
||||
},
|
||||
|
@ -61,9 +60,15 @@ function act(fun) {
|
|||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function callRenderQueue() {
|
||||
callRenderQueueImmediate();
|
||||
runAsyncEffects();
|
||||
// effects可能产生刷新任务,这里再执行一次
|
||||
callRenderQueueImmediate();
|
||||
}
|
||||
|
||||
export {
|
||||
act
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue