Match-id-bb9faf6ae4ba719bc43b183906c421855724b0b7

This commit is contained in:
* 2023-01-19 17:44:36 +08:00
parent f3c0cf9a05
commit 8c13846d2d
1 changed files with 15 additions and 10 deletions

View File

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