Skip to content

Error: Request is throttled #99

@MantasR

Description

@MantasR

It doesn't happen all the time, however since I have imports of orders on cron job (every 3 minutes) I sometimes find my server crashed with this error:

{ Error: Request is throttled
    at Promise.try (/home/api/e-shop-sync/node_modules/mws-api/lib/client.js:144:33)
    at tryCatcher (/home/api/e-shop-sync/node_modules/bluebird/js/release/util.js:16:23)
    at Function.Promise.attempt.Promise.try (/home/api/e-shop-sync/node_modules/bluebird/js/release/method.js:39:29)
    at request.then (/home/api/e-shop-sync/node_modules/mws-api/lib/client.js:140:31)
    at tryCatcher (/home/api/e-shop-sync/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/api/e-shop-sync/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/home/api/e-shop-sync/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/home/api/e-shop-sync/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/home/api/e-shop-sync/node_modules/bluebird/js/release/promise.js:693:18)
    at Promise._fulfill (/home/api/e-shop-sync/node_modules/bluebird/js/release/promise.js:638:18)
    at Request._callback (/home/api/e-shop-sync/node_modules/bluebird/js/release/nodeback.js:42:21)
    at Request.self.callback (/home/api/e-shop-sync/node_modules/request/request.js:188:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:194:7)
    at Request.<anonymous> (/home/api/e-shop-sync/node_modules/request/request.js:1171:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:191:7)
    at IncomingMessage.<anonymous> (/home/api/e-shop-sync/node_modules/request/request.js:1091:12)
    at Object.onceWrapper (events.js:293:19)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:188:7)
    at endReadableNT (_stream_readable.js:975:12) code: 'RequestThrottled', type: {}
}

Here is my setup:

    if (!marketplaceCredentials.other.meta) {

        marketplaceCredentials.other.meta = {
            retry: true, // retry requests when throttled
            next: true, // auto-paginate
            limit: Infinity // only get this number of items (NOT the same as MaxRequestsPerPage)
        }

    }

    this.mws = new MWSClient(marketplaceCredentials.other);

And here is where I am getting orders:

    if (!query) {
        return Promise.reject("Query not provided");
    }

    if (!query.fromDate) {
        return Promise.reject("From date not provided");
    }

    return new Promise((resolve, reject) => {

        this.mws.Orders.ListOrders({
            MarketplaceId: this.credentials.other.marketplaceId,
            LastUpdatedAfter: new Date(query.fromDate),
        }).then(({result, metadata}) => {

            let that = this;

            console.log("getOrders => orders.length", result.length);

            return Promise.map(result, function (orderItem, index) {

                return that.mws.Orders.ListOrderItems({AmazonOrderId: orderItem.AmazonOrderId}).then(res => {
                    console.log("orderItem.AmazonOrderId", orderItem.AmazonOrderId);
                    orderItem.listOrderItems = res.result;
                    return Promise.resolve(orderItem);
                });

            }, {concurrency: 5});

        }).then(function (result) {

            resolve(result);

        }).catch(error => {
            console.log(error);
            reject(error);
        });

    });

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions