Anti-Flicker Timing
UI flickering occurs when fast operations (50–100ms) show a loading spinner for a split second, creating visual noise.
ngx-task provides two timing primitives to solve UI flickering: pendingDelay and minimumPendingDuration.
1. pendingDelay
pendingDelay defers turning task.pending() to true for a specified duration in milliseconds.
const quickSearch = createTask(searchHandler, { pendingDelay: 150, // Only show spinner if search takes LONGER than 150ms});- If request completes in 50ms:
pending()staysfalsethe entire time. No spinner flash! - If request takes 500ms:
pending()flips totrueafter 150ms and remainstrueuntil complete.
2. minimumPendingDuration
minimumPendingDuration guarantees that once task.pending() becomes true, it stays true for at least N milliseconds.
const saveForm = createTask(saveHandler, { minimumPendingDuration: 400, // Spinner stays visible for at least 400ms once shown});Prevents the spinner from disappearing so fast that the user misses the feedback.
Combined Example
const smoothTask = createTask(apiHandler, { pendingDelay: 150, // Don't show spinner for sub-150ms responses minimumPendingDuration: 300,// Once shown, keep spinner visible for at least 300ms});