UNPKG

4.21 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 if(typeof response != object)
33 callback(true, {func: 'queue-response-string', lCode: '-E', msg: response, type: 'unknown-error'})
34 else {
35 /*IFLOG*/if(process.env.QUEUE_CATCH_RESPONSE == 'true') console.developer.log(response)
36 callback(true, {func: response.func || 'anonymus', lCode: response.lCode || '-E', msg: response.msg || 'Sikertelen lefutás!', type: response.type || 'error'})
37 }
38 })
39 }).catch(err => {
40 console.log(err)
41 callback(true, {func: '@apiQueue->communicate', lCode: '-E1', msg: 'Sikertelen lefutás!', type: 'request-error'})
42 })
43 } else {
44 this.masterFunction(this.sharedObject)
45 .then(function(response) {
46 /*IFLOG*/if(process.env.QUEUE_THEN_RESPONSE == 'true') console.developer.log(response)
47 callback(false, {func: response.func || 'anonymus', lCode: response.lCode || '-S', msg: response.msg || 'Sikeres lefutás!', type: response.type || 'success', document: response.document || null})
48 })
49 .catch(function(response) {
50 /*IFLOG*/if(process.env.QUEUE_CATCH_RESPONSE == 'true') console.developer.log(response)
51 callback(true, {func: response.func || 'anonymus', lCode: response.lCode || '-E', msg: response.msg || 'Sikertelen lefutás!', type: response.type || 'error'})
52 })
53 }
54 }
55 else {
56 ++this.counter
57 return this.queue.shift()[1](this.sharedObject, this)
58 }
59}
60
61Queue.prototype.stop = function(object) {
62 var callback = this.queue.pop()[1]
63 this.queue = null
64 /*IFLOG*/if(process.env.QUEUE_STOP_LOG == 'true') console.developer.log(object)
65 callback(true, {func: object.func || 'anonymus', lCode: object.lCode || '-E2', msg: object.msg || 'Sikertelen lefutás!', type: object.type || 'queue-error'})
66}
67
68Queue.prototype.setMasterFunction = function(schema, masterFunction) {
69 if(schema === undefined || schema == null) this.masterFunction = masterFunction
70 else this.masterFunction = function(object) {
71 return new Promise(function(resolve, reject) {
72 var valid = ajv.validate(schema, object)
73 /*IFLOG*/if(process.env.AJV_ERROR_LOG == 'true') console.developer.log(ajv.errors)
74 if(valid) {
75 masterFunction(object).then(function(response) {
76 resolve(response)
77 }).catch(function(response) {
78 reject(response)
79 })
80 }
81 else reject({func: '@dataChecker', lCode: '-DC', msg: 'Hibás adatokat adott meg!', type: 'data-error'})
82 })
83 }
84}
85
86module.exports = Queue
\No newline at end of file