Canceling Asynchronous Operations

Learn how to cancel asynchronous operations on a single-threaded platform.

Being able to stop a long-running operation is particularly useful if the operation has been canceled by the user or if it has become redundant. In multithreaded programming, we can just terminate the thread, but on a single-threaded platform such as Node.js, things can get a little bit more complicated.

Note: In this section, we’ll be talking about canceling asynchronous operations and not about canceling promises, which is a different matter altogether. By the way, the Promises/A+ standard doesn’t include an API for canceling promises. However, we can use a third-party promise library such as bluebird if we need such a feature. Note that canceling a promise doesn’t mean that the operation the promise refers to will also be canceled. In fact, bluebird offers an onCancel callback in the promise constructor, in addition to resolve and reject, which can be used to cancel the underlying async operation when the promise is canceled. This is actually what this section is about.

A basic recipe for creating cancelable functions

Actually, in asynchronous programming, the basic principle for canceling the execution of a function is very simple: we check if the operation has been canceled after every asynchronous call, and if that’s the case, we prematurely quit the operation. Consider, for example, the following code:

Get hands-on with 1200+ tech skills courses.