|
|
|
@ -3,79 +3,79 @@ const adapter = require('../node/index.js')
@@ -3,79 +3,79 @@ const adapter = require('../node/index.js')
|
|
|
|
|
let jobCounter = 0; |
|
|
|
|
|
|
|
|
|
module.exports = class TesseractJob { |
|
|
|
|
constructor(instance){ |
|
|
|
|
this.id = 'Job-' + (++jobCounter) + '-' + Math.random().toString(16).slice(3, 8) |
|
|
|
|
constructor(instance){ |
|
|
|
|
this.id = 'Job-' + (++jobCounter) + '-' + Math.random().toString(16).slice(3, 8) |
|
|
|
|
|
|
|
|
|
this._instance = instance; |
|
|
|
|
this._resolve = [] |
|
|
|
|
this._reject = [] |
|
|
|
|
this._progress = [] |
|
|
|
|
this._finally = [] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
then(resolve, reject){ |
|
|
|
|
if(this._resolve.push){ |
|
|
|
|
this._resolve.push(resolve) |
|
|
|
|
}else{ |
|
|
|
|
resolve(this._resolve) |
|
|
|
|
this._instance = instance; |
|
|
|
|
this._resolve = [] |
|
|
|
|
this._reject = [] |
|
|
|
|
this._progress = [] |
|
|
|
|
this._finally = [] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(reject) this.catch(reject); |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
catch(reject){ |
|
|
|
|
if(this._reject.push){ |
|
|
|
|
this._reject.push(reject) |
|
|
|
|
}else{ |
|
|
|
|
reject(this._reject) |
|
|
|
|
then(resolve, reject){ |
|
|
|
|
if(this._resolve.push){ |
|
|
|
|
this._resolve.push(resolve) |
|
|
|
|
}else{ |
|
|
|
|
resolve(this._resolve) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(reject) this.catch(reject); |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
catch(reject){ |
|
|
|
|
if(this._reject.push){ |
|
|
|
|
this._reject.push(reject) |
|
|
|
|
}else{ |
|
|
|
|
reject(this._reject) |
|
|
|
|
} |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
progress(fn){ |
|
|
|
|
this._progress.push(fn) |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
finally(fn) { |
|
|
|
|
this._finally.push(fn) |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
_send(action, payload){ |
|
|
|
|
adapter.sendPacket(this._instance, { |
|
|
|
|
jobId: this.id, |
|
|
|
|
action: action, |
|
|
|
|
payload: payload |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
progress(fn){ |
|
|
|
|
this._progress.push(fn) |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
finally(fn) { |
|
|
|
|
this._finally.push(fn) |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
_send(action, payload){ |
|
|
|
|
adapter.sendPacket(this._instance, { |
|
|
|
|
jobId: this.id, |
|
|
|
|
action: action, |
|
|
|
|
payload: payload |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_handle(packet){ |
|
|
|
|
var data = packet.data; |
|
|
|
|
let runFinallyCbs = false; |
|
|
|
|
_handle(packet){ |
|
|
|
|
var data = packet.data; |
|
|
|
|
let runFinallyCbs = false; |
|
|
|
|
|
|
|
|
|
if(packet.status === 'resolve'){ |
|
|
|
|
if(this._resolve.length === 0) console.debug(data); |
|
|
|
|
this._resolve.forEach(fn => { |
|
|
|
|
var ret = fn(data); |
|
|
|
|
if(ret && typeof ret.then == 'function'){ |
|
|
|
|
console.warn('TesseractJob instances do not chain like ES6 Promises. To convert it into a real promise, use Promise.resolve.') |
|
|
|
|
if(packet.status === 'resolve'){ |
|
|
|
|
if(this._resolve.length === 0) console.debug(data); |
|
|
|
|
this._resolve.forEach(fn => { |
|
|
|
|
var ret = fn(data); |
|
|
|
|
if(ret && typeof ret.then == 'function'){ |
|
|
|
|
console.warn('TesseractJob instances do not chain like ES6 Promises. To convert it into a real promise, use Promise.resolve.') |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
this._resolve = data; |
|
|
|
|
this._instance._dequeue() |
|
|
|
|
runFinallyCbs = true; |
|
|
|
|
}else if(packet.status === 'reject'){ |
|
|
|
|
if(this._reject.length === 0) console.error(data); |
|
|
|
|
this._reject.forEach(fn => fn(data)) |
|
|
|
|
this._reject = data; |
|
|
|
|
this._instance._dequeue() |
|
|
|
|
runFinallyCbs = true; |
|
|
|
|
}else if(packet.status === 'progress'){ |
|
|
|
|
this._progress.forEach(fn => fn(data)) |
|
|
|
|
}else{ |
|
|
|
|
console.warn('Message type unknown', packet.status) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
this._resolve = data; |
|
|
|
|
this._instance._dequeue() |
|
|
|
|
runFinallyCbs = true; |
|
|
|
|
}else if(packet.status === 'reject'){ |
|
|
|
|
if(this._reject.length === 0) console.error(data); |
|
|
|
|
this._reject.forEach(fn => fn(data)) |
|
|
|
|
this._reject = data; |
|
|
|
|
this._instance._dequeue() |
|
|
|
|
runFinallyCbs = true; |
|
|
|
|
}else if(packet.status === 'progress'){ |
|
|
|
|
this._progress.forEach(fn => fn(data)) |
|
|
|
|
}else{ |
|
|
|
|
console.warn('Message type unknown', packet.status) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (runFinallyCbs) { |
|
|
|
|
this._finally.forEach(fn => fn(data)); |
|
|
|
|
if (runFinallyCbs) { |
|
|
|
|
this._finally.forEach(fn => fn(data)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |