Source: jive-sdk-api/lib/task/tasks.js

/*
 * Copyright 2013 Jive Software
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

var jive = require('../../api');

var task = function( _runnable, _interval, _id ) {
    if ( !_runnable ) {
        throw 'A runnable function is required!';
    }

    return {
        'handler' : _runnable,
        'interval': _interval,
        'id'      : _id
    };
};

/**
 * API for managing recurrent tasks.
 * @module tasks
 */

/**
 * Schedules a recurrent task.
 * @param {function} handler Required. This function is invoked when the task scheduling condtions are met.
 * @param {number} interval Optional. Number of milliseconds in between recurrences of the handler being invoked.
 * @param {String} id Optional. Unique identifier for the task.
 * @returns {Object} a task object wrapping the provided parameters (handler, interval, id).
 */
exports.build = function(handler, interval, id) {
    return new task( handler, interval, id );
};

/**
 * @param {Object} task Required. Wrapper object for task characteristics.
 * @param {function} task.handler Required. This function is invoked when the task scheduling conditions are met.
 * @param {number} task.interval Optional. Number of milliseconds in between recurrences of the handler being invoked.
 * @param {String} task.id Optional. Unique identifier for the task.
 * @param {Object} scheduler Required. A scheduler strategy, similar to @see {@link memoryScheduler}.
 * @returns {Promise} Promise Promise .resolve and .reject handlers will be called depending on the success or failure of the handler
 * function when it is invoked.
 */
exports.schedule = function( task, scheduler ) {
    if ( !task || typeof task !== 'object' ) {
        throw Error("A task object is required.");
    }

    if ( !scheduler ) {
        throw Error("A scheduler is required.");
    }

    if ( typeof scheduler['schedule'] !== 'function' ) {
        throw Error("Invalid scheduler - requires a schedule function.");
    }

    var eventID = task['id'] || jive.util.guid();
    var context = { 'eventListener' : '__jive_system_tasks' };
    var interval = task['interval'];
    jive.events.registerEventListener( eventID, task['handler'], {
        'eventListener' : '__jive_system_tasks'
    });
    return scheduler.schedule(eventID, context, interval);
};