lib/bigIp.js
function checkTask(taskPath, taskIdToCheck, options) {
    const func = function () {
        const deferred = q.defer();
        this.list(`${taskPath}/${taskIdToCheck}`, undefined, util.NO_RETRY)
            .then((response) => {
                const statusAttribute = (options && options.statusAttribute)
                    ? options.statusAttribute
                    : '_taskState';
                const taskState = response[statusAttribute];
                if (taskState === 'VALIDATING' || taskState === 'STARTED') {
                    // this is a normal state, just not done yet - keep waiting
                    deferred.reject();
                } else if (taskState === 'COMPLETED' || taskState === 'FINISHED') {
                    deferred.resolve({ success: true, response });
                } else if (taskState === 'FAILED') {
                    deferred.resolve({ success: false, response });
                } else {
                    deferred.reject(new Error(`checkTask: unexpected command status: ${taskState}`));
                }
            })
            .catch(() => {
                // if this throws, assume it is because restjavad has been restarted
                // and we are done for now
                deferred.resolve({ success: true });
            });

        return deferred.promise;
    };

    return util.tryUntil(this, util.DEFAULT_RETRY, func);
}
function checkTask(taskPath, taskIdToCheck, options) {
    const func = function () {
        const deferred = q.defer();
        this.list(`${taskPath}/${taskIdToCheck}`, undefined, util.NO_RETRY)
            .then((response) => {
                const statusAttribute = (options && options.statusAttribute)
                    ? options.statusAttribute
                    : '_taskState';
                const taskState = response[statusAttribute];
                if (taskState === 'VALIDATING' || taskState === 'STARTED') {
                    // this is a normal state, just not done yet - keep waiting
                    deferred.reject();
                } else if (taskState === 'COMPLETED' || taskState === 'FINISHED') {
                    deferred.resolve({ success: true, response });
                } else if (taskState === 'FAILED') {
                    deferred.resolve({ success: false, response });
                } else {
                    deferred.reject(new Error(`checkTask: unexpected command status: ${taskState}`));
                }
            })
            .catch(() => {
                // if this throws, assume it is because restjavad has been restarted
                // and we are done for now
                deferred.resolve({ success: true });
            });

        return deferred.promise;
    };

    return util.tryUntil(this, util.DEFAULT_RETRY, func);
}
Checks status of iControl REST task

@param {String} taskPath                     - URL that created the task
@param {String} taskIdToCheck                - ID of task as returned by create
@param {Object} [options]                    - Options for parsing task response
@param {String} [options.statusAttribute]    - Name of the Task Status attribute in the result response.
Default: '_taskState'

@returns {Promise} A promise which is resolved with true if the task completes
successfully, resolved with false if task goes to error state
or rejected if some other error occurs.