Cancel Request

Requests can be cancel before the response has been received. Therefore, if the API implemented with Barktler wants to support request cancel, the calling method must use super._requestForPendingRequest.

With super._requestForPendingRequest Method

Considering the following example:

import { Barktler } from "@barktler/core";
import { PendingRequest } from "@barktler/driver";

class GoogleSearchAPI extends Barktler {

    public static create(): GoogleSearchAPI {

        return new GoogleSearchAPI();
    }

    public async search(keyword: string): Promise<void> {

        const pendingRequest: PendingRequest = await this._requestForPendingRequest({

            url: `https://www.google.com/search?q=${keyword}`,
            method: 'GET',
        });

        await pendingRequest.response; -> Wait for response data
        pendingRequest.cancel(); -> cancel request
    }
}

You can implement some complex object structures to support data canceling.

Using the super._requestForPendingRequest requesting method, data validation, processing, and post-hook side effect will not execute.
For version @barktler/core >=2.5.0, execute super._triggerPostHook(responseData), could makeup the validation, processing and side effects. See Manually Trigger Hooks for more details of hook execution.

With super._requestForHookedPendingRequest Method

Only available with @barktler/core >=2.9.0.

Considering the following example:

import { Barktler, HookedPendingRequest } from "@barktler/core";

class GoogleSearchAPI extends Barktler {

    public static create(): GoogleSearchAPI {

        return new GoogleSearchAPI();
    }

    public async search(keyword: string): Promise<void> {

        const pendingRequest: HookedPendingRequest = await this._requestForHookedPendingRequest({

            url: `https://www.google.com/search?q=${keyword}`,
            method: 'GET',
        });

        await pendingRequest.response; -> Wait for response data
        pendingRequest.cancel(); -> cancel request
    }
}

You can implement some complex object structures to support data canceling.

Next

See Use Mixin for how to use a mixin to enhance your API call.