У меня нет четкого ответа для вас, поскольку я также не очень хорошо знаком с InteractionManager.setDeadline()
, но я думаю, что если вы посмотрите на тесты, вы поймете, что вам нужно.Часто тесты служат отличной заменой отсутствия документации.
Поэтому взгляните на InteractionManager-test.js, в частности, L230-L261
Там вы найдете эти тесты ...
it('should execute tasks in loop within deadline', () => {
InteractionManager.setDeadline(100);
BatchedBridge.getEventLoopRunningTime.mockReturnValue(10);
const task1 = createSequenceTask(1);
const task2 = createSequenceTask(2);
InteractionManager.runAfterInteractions(task1);
InteractionManager.runAfterInteractions(task2);
jest.runOnlyPendingTimers();
expectToBeCalledOnce(task1);
expectToBeCalledOnce(task2);
});
it('should execute tasks one at a time if deadline exceeded', () => {
InteractionManager.setDeadline(100);
BatchedBridge.getEventLoopRunningTime.mockReturnValue(200);
const task1 = createSequenceTask(1);
const task2 = createSequenceTask(2);
InteractionManager.runAfterInteractions(task1);
InteractionManager.runAfterInteractions(task2);
jest.runOnlyPendingTimers();
expectToBeCalledOnce(task1);
expect(task2).not.toBeCalled();
jest.runOnlyPendingTimers(); // resolve1
jest.runOnlyPendingTimers(); // task2
expectToBeCalledOnce(task2);
});
Мне кажется, это способ разделить работу, которая может быть полезной.
Ваше решение 3. интересно.Я лично хотел бы увидеть код по этому вопросу.У меня нет опыта в этой области, но это звучит захватывающе.Я думаю, что веб-просмотр определенно должен помочь перенести работу в отдельный поток, но я никогда не использовал его для этого случая раньше.