UNPKG

3.97 kBJavaScriptView Raw
1var Ajv = require('ajv')
2var ajv = new Ajv({allErrors: true})
3var requestQueue = require('./requestQueue')
4
5var Queue = function(object) {
6 this.counter = 1
7 this.masterFunction = null
8 if(object[0] instanceof Function) {
9 this.queue = Object.entries(object)
10 this.sharedObject = {}
11 } else {
12 this.queue = Object.entries(object)
13 this.sharedObject = this.queue.shift()[1] || {}
14 }
15 this.queueLength = this.queue.length
16}
17
18Queue.prototype.next = function() {
19 if(this.queueLength == this.counter) {
20 var callback = this.queue.shift()[1]
21 if(this.sharedObject.requestQueue) {
22 let aQ = new requestQueue()
23 aQ.communicate(this.sharedObject.requestQueue).then(responses => {
24 this.sharedObject.responses = responses
25 delete this.sharedObject.requestQueue
26 this.masterFunction(this.sharedObject)
27 .then(function(response) {
28 /*IFLOG*/if(process.env.QUEUE_THEN_RESPONSE == 'true') console.developer.log(response)
29 callback(false, {func: response.func || 'anonymus', lCode: response.lCode || '-S', msg: response.msg || 'Sikeres lefutás!', type: response.type || 'success', document: response.document || null})
30 })
31 .catch(function(response) {
32 /*IFLOG*/if(process.env.QUEUE_CATCH_RESPONSE == 'true') console.developer.log(response)
33 callback(true, {func: response.func || 'anonymus', lCode: response.lCode || '-E', msg: response.msg || 'Sikertelen lefutás!', type: response.type || 'error'})
34 })
35 }).catch(err => {
36 console.log(err)
37 callback(true, {func: '@apiQueue->communicate', lCode: '-E1', msg: 'Sikertelen lefutás!', type: 'request-error'})
38 })
39 } else {
40 this.masterFunction(this.sharedObject)
41 .then(function(response) {
42 /*IFLOG*/if(process.env.QUEUE_THEN_RESPONSE == 'true') console.developer.log(response)
43 callback(false, {func: response.func || 'anonymus', lCode: response.lCode || '-S', msg: response.msg || 'Sikeres lefutás!', type: response.type || 'success', document: response.document || null})
44 })
45 .catch(function(response) {
46 /*IFLOG*/if(process.env.QUEUE_CATCH_RESPONSE == 'true') console.developer.log(response)
47 callback(true, {func: response.func || 'anonymus', lCode: response.lCode || '-E', msg: response.msg || 'Sikertelen lefutás!', type: response.type || 'error'})
48 })
49 }
50 }
51 else {
52 ++this.counter
53 return this.queue.shift()[1](this.sharedObject, this)
54 }
55}
56
57Queue.prototype.stop = function(object) {
58 var callback = this.queue.pop()[1]
59 this.queue = null
60 /*IFLOG*/if(process.env.QUEUE_STOP_LOG == 'true') console.developer.log(object)
61 callback(true, {func: object.func || 'anonymus', lCode: object.lCode || '-E2', msg: object.msg || 'Sikertelen lefutás!', type: object.type || 'queue-error'})
62}
63
64Queue.prototype.setMasterFunction = function(schema, masterFunction) {
65 if(schema === undefined || schema == null) this.masterFunction = masterFunction
66 else this.masterFunction = function(object) {
67 return new Promise(function(resolve, reject) {
68 var valid = ajv.validate(schema, object)
69 /*IFLOG*/if(process.env.AJV_ERROR_LOG == 'true') console.developer.log(ajv.errors)
70 if(valid) {
71 masterFunction(object).then(function(response) {
72 resolve(response)
73 }).catch(function(response) {
74 reject(response)
75 })
76 }
77 else reject({func: '@dataChecker', lCode: '-DC', msg: 'Hibás adatokat adott meg!', type: 'data-error'})
78 })
79 }
80}
81
82module.exports = Queue
\No newline at end of file