From 6ec019456dd76cd00f0fe059b732d728ea780984 Mon Sep 17 00:00:00 2001 From: Andriy Date: Wed, 17 Oct 2018 04:59:01 +0300 Subject: [PATCH 1/3] add VK.prototype.promise --- sdk.js | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/sdk.js b/sdk.js index 1d0be59..44f1f9d 100644 --- a/sdk.js +++ b/sdk.js @@ -541,3 +541,86 @@ VK.prototype._parseSessionData = function(data) { return this.sortObjectByKey(parsedData); }; + + + +/** + * Promise API method + * @param {string} _method + * @param {mixed} _params + * @param {mixed} _response + * @returns {mixed} + * + * @see https://vk.com/pages?oid=-17680044&p=Application_Interaction_with_API + */ +VK.prototype.promise = function(_method, _requestParams) { + return new Promise((resolve,reject)=>{ + + var self = this; + + var params = { + 'lang' : this.options.lang, + 'v' : this.options.version, + 'https' : (this.options.https) ? 1 : 0 + }; + + if (this.isEmpty(_requestParams) === false) { + for (var i in _requestParams) { + params[i] = _requestParams[i]; + } + } + + var requestString = this.buildQuery(params); + + if (this.options.secure) { + if (this.token) { + requestString = requestString + '&access_token=' + this.token; + } + + if (this.options.appSecret) { + requestString = requestString + '&client_secret=' + this.options.appSecret; + } + } + + var options = { + host: 'api.vk.com', + port: 443, + path: '/method/' + _method , + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': requestString.length + } + }; + + this.waitForNextRequest(function () { + self.requestingNow = true; + var post_req = https.request(options, function(res) { + var apiResponse = ""; + res.setEncoding('utf8'); + + res.on('data', function(chunk) { + apiResponse += chunk; + }); + + res.on('end', function() { + self.reqLastTime = new Date(); + self.requestingNow = false; + try { + var o = JSON.parse(apiResponse); + } catch(e) { + return reject('parse-error', apiResponse); + } + + resolve(o); + }); + }).on('error', function (e) { + self.requestingNow = false; + reject('http-error', e); + }); + + post_req.write(requestString); + post_req.end(); + }) + }) +}; \ No newline at end of file From 9c36c8c5e7be45b18501d30a3395a4498c80a184 Mon Sep 17 00:00:00 2001 From: Andriy Date: Wed, 17 Oct 2018 05:00:33 +0300 Subject: [PATCH 2/3] fix return --- sdk.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk.js b/sdk.js index 44f1f9d..9045383 100644 --- a/sdk.js +++ b/sdk.js @@ -549,7 +549,7 @@ VK.prototype._parseSessionData = function(data) { * @param {string} _method * @param {mixed} _params * @param {mixed} _response - * @returns {mixed} + * @returns {Promise} * * @see https://vk.com/pages?oid=-17680044&p=Application_Interaction_with_API */ From aa7390401997dad27299f5c05e2b7d35b3a22697 Mon Sep 17 00:00:00 2001 From: Andriy Date: Wed, 17 Oct 2018 05:16:38 +0300 Subject: [PATCH 3/3] new version of promise --- sdk.js | 70 +++++----------------------------------------------------- 1 file changed, 5 insertions(+), 65 deletions(-) diff --git a/sdk.js b/sdk.js index 9045383..37feb9b 100644 --- a/sdk.js +++ b/sdk.js @@ -555,72 +555,12 @@ VK.prototype._parseSessionData = function(data) { */ VK.prototype.promise = function(_method, _requestParams) { return new Promise((resolve,reject)=>{ - - var self = this; - - var params = { - 'lang' : this.options.lang, - 'v' : this.options.version, - 'https' : (this.options.https) ? 1 : 0 - }; - - if (this.isEmpty(_requestParams) === false) { - for (var i in _requestParams) { - params[i] = _requestParams[i]; - } - } - - var requestString = this.buildQuery(params); - - if (this.options.secure) { - if (this.token) { - requestString = requestString + '&access_token=' + this.token; - } - - if (this.options.appSecret) { - requestString = requestString + '&client_secret=' + this.options.appSecret; - } - } - - var options = { - host: 'api.vk.com', - port: 443, - path: '/method/' + _method , - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - 'Content-Length': requestString.length + this.request(_method,_params,(res)=>{ + if(res.error) { + reject(res.error) + } else { + resolve(res); } - }; - - this.waitForNextRequest(function () { - self.requestingNow = true; - var post_req = https.request(options, function(res) { - var apiResponse = ""; - res.setEncoding('utf8'); - - res.on('data', function(chunk) { - apiResponse += chunk; - }); - - res.on('end', function() { - self.reqLastTime = new Date(); - self.requestingNow = false; - try { - var o = JSON.parse(apiResponse); - } catch(e) { - return reject('parse-error', apiResponse); - } - - resolve(o); - }); - }).on('error', function (e) { - self.requestingNow = false; - reject('http-error', e); - }); - - post_req.write(requestString); - post_req.end(); }) }) }; \ No newline at end of file