UNPKG

3.15 kBJavaScriptView Raw
1var Ajv = require('ajv')
2var ajv = new Ajv({allErrors: true})
3
4var lRequester = require('./requester')
5var requester = new lRequester()
6
7var Queue = function(object) {
8 this.counter = 1
9 this.masterFunction = null
10 if(object[0] instanceof Function) {
11 this.queue = Object.entries(object)
12 this.sharedObject = {}
13 } else {
14 this.queue = Object.entries(object)
15 this.sharedObject = this.queue.shift()[1] || {}
16 }
17 this.queueLength = this.queue.length
18}
19
20Queue.prototype.next = function() {
21 if(this.queueLength == this.counter) {
22 var callback = this.queue.shift()[1]
23 this.masterFunction(this.sharedObject)
24 .then(function(response) {
25 /*IFLOG*/if(process.env.QUEUE_THEN_RESPONSE == 'true') console.developer.log(response)
26 callback(false, {func: response.func || '@queue-next-then', lCode: response.lCode || '-QNT', msg: response.msg || 'Sikeres lefutás!', type: 'success', document: response.document || null})
27 })
28 .catch(function(response) {
29 /*IFLOG*/if(process.env.QUEUE_CATCH_RESPONSE == 'true') console.developer.log(response)
30 callback(true, {func: response.func || '@queue-next-catch', lCode: response.lCode || '-QNC', msg: response.msg || 'Sikertelen lefutás!', type: response.type || 'error'})
31 })
32 }
33 else {
34 ++this.counter
35 let currentItem = this.queue.shift()[1]
36 if(currentItem.type == 'request') {
37 this.sharedObject.request = currentItem
38 switch(currentItem.method) {
39 case 'GET': return requester.get(this.sharedObject, this)
40 case 'POST': return requester.post(this.sharedObject, this)
41 default: this.stop({func: '@queue-requester', lCode: '-QR', msg: `Nincs megadva lekérés típus (URL: ${currentItem.url})`, type: 'request-error'})
42 }
43 }
44 else return currentItem(this.sharedObject, this)
45 }
46}
47
48Queue.prototype.stop = function(object) {
49 var callback = this.queue.pop()[1]
50 this.queue = null
51 /*IFLOG*/if(process.env.QUEUE_STOP_LOG == 'true') console.developer.log(object)
52 callback(true, {func: object.func || '@queue-stop', lCode: object.lCode || '-QS', msg: object.msg || 'Sikertelen lefutás!', type: object.type || 'queue-error'})
53}
54
55Queue.prototype.setMasterFunction = function(schema, masterFunction) {
56 if(schema === undefined || schema == null) this.masterFunction = masterFunction
57 else this.masterFunction = function(object) {
58 return new Promise(function(resolve, reject) {
59 var valid = ajv.validate(schema, object)
60 /*IFLOG*/if(process.env.AJV_ERROR_LOG == 'true') console.developer.log(ajv.errors)
61 if(valid) {
62 masterFunction(object).then(function(response) {
63 resolve(response)
64 }).catch(function(response) {
65 reject(response)
66 })
67 }
68 else reject({func: '@dataChecker', lCode: '-DC', msg: 'Hibás adatokat adott meg!', type: 'data-error'})
69 })
70 }
71}
72
73module.exports = Queue
\No newline at end of file