64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
// TaskChain chains tasks
|
|
// and extends Task
|
|
|
|
import * as plugins from './taskbuffer.plugins'
|
|
import { Task } from './taskbuffer.classes.task'
|
|
import helpers = require('./taskbuffer.classes.helpers')
|
|
|
|
export class Taskchain extends Task {
|
|
taskArray: Task[]
|
|
private _oraObject
|
|
constructor(optionsArg: {
|
|
taskArray: Task[],
|
|
name?: string,
|
|
log?: boolean,
|
|
buffered?: boolean,
|
|
bufferMax?: number
|
|
}) {
|
|
let options = plugins.lodash.merge(
|
|
{
|
|
name: 'unnamed Taskchain',
|
|
log: false
|
|
},
|
|
optionsArg,
|
|
{
|
|
taskFunction: (x: any) => { // this is the function that gets executed when TaskChain is triggered
|
|
let done = plugins.q.defer() // this is the starting Deferred object
|
|
let taskCounter = 0 // counter for iterating async over the taskArray
|
|
let iterateTasks = (x) => {
|
|
if (typeof this.taskArray[ taskCounter ] !== 'undefined') {
|
|
this._oraObject.text(this.name + ' running: Task' + this.taskArray[ taskCounter ].name)
|
|
this.taskArray[ taskCounter ].trigger(x)
|
|
.then((x) => {
|
|
plugins.beautylog.ok(this.taskArray[ taskCounter ].name)
|
|
taskCounter++
|
|
iterateTasks(x)
|
|
})
|
|
} else {
|
|
this._oraObject.endOk('Taskchain "' + this.name + '" completed successfully')
|
|
done.resolve(x)
|
|
}
|
|
}
|
|
iterateTasks(x)
|
|
return done.promise
|
|
}
|
|
}
|
|
)
|
|
super(options)
|
|
this.taskArray = optionsArg.taskArray
|
|
this._oraObject = plugins.beautylog.ora
|
|
if (optionsArg.log === true) {
|
|
this._oraObject.start()
|
|
}
|
|
}
|
|
addTask (taskArg: Task) {
|
|
this.taskArray.push(taskArg)
|
|
}
|
|
removeTask (taskArg: Task) {
|
|
// TODO:
|
|
}
|
|
shiftTask () {
|
|
// TODO:
|
|
}
|
|
}
|