Skip to content

Commit b55f75d

Browse files
authored
fix issue facebook#19362 + test (facebook#19412)
1 parent d93c8fa commit b55f75d

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

packages/scheduler/src/Scheduler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ function workLoop(hasTimeRemaining, initialTime) {
177177
break;
178178
}
179179
const callback = currentTask.callback;
180-
if (callback !== null) {
180+
if (typeof callback === 'function') {
181181
currentTask.callback = null;
182182
currentPriorityLevel = currentTask.priorityLevel;
183183
const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;

packages/scheduler/src/__tests__/Scheduler-test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,5 +739,19 @@ describe('Scheduler', () => {
739739
// Only A should flush
740740
expect(Scheduler).toFlushAndYield(['A']);
741741
});
742+
743+
it('gracefully handles scheduled tasks that are not a function', () => {
744+
scheduleCallback(ImmediatePriority, null);
745+
expect(Scheduler).toFlushWithoutYielding();
746+
747+
scheduleCallback(ImmediatePriority, undefined);
748+
expect(Scheduler).toFlushWithoutYielding();
749+
750+
scheduleCallback(ImmediatePriority, {});
751+
expect(Scheduler).toFlushWithoutYielding();
752+
753+
scheduleCallback(ImmediatePriority, 42);
754+
expect(Scheduler).toFlushWithoutYielding();
755+
});
742756
});
743757
});

0 commit comments

Comments
 (0)