taskbuffer/ts/taskbuffer.classes.taskchain.ts

60 lines
2.2 KiB
TypeScript

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:plugins.beautylog.Ora;
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 = new plugins.beautylog.Ora("Taskchain idle","blue");
if(optionsArg.log === true){
this._oraObject.start();
};
}
addTask(taskArg:Task){
this.taskArray.push(taskArg);
};
removeTask(taskArg:Task){
//TODO
};
shiftTask(){
};
};