Как связать обработчик событий с запросом обещания закрыть сокет, когда ресурс слишком велик? - PullRequest
0 голосов
/ 10 января 2019

Используя запрос-обещание, мне интересно, как я могу закрыть сокет раньше, когда ресурс превышает 2000 бит. Из обработчика событий .on ('data', callback) я бы хотел закрыть сокет и перейти к коду внутри then (). Я уже пробовал this.abort (), но это не сработало. На данный момент дескриптор события работает и принимает количество битов, но я могу закрыть сокет от события, когда битовый размер вызывает условие if.

var request = require('request');
var rp = require('request-promise-native');

var size = 0;
const MAX_SIZE = 2000;

rp
.get('https://sitecozy.com/screenshot.png')
.on('data',(ok)=>
{console.log(size)
size += ok.length;

    if (size > MAX_SIZE) {
        console.log("Aborting this request as it exceeds max size")
    // I wish to close the socket and trigger then() from here.
    }

}

)
.then(function (htmlString) {
   console.log("good")
})
.catch(function (err) {
   console.log("bad") 
});;

1 Ответ

0 голосов
/ 10 января 2019

Мне удалось сделать это с помощью пакета запроса на стенд и завернуть его в обещание. Я хотел использовать запрос-обещание, потому что в моем коде уже много вложенных блоков:

const request = require('request');

var size =0;
var maxLength = 8175;

new Promise ((resolve,reject)=>{
var jo = request("https://upload.wikimedia.org/wikipedia/commons/9/9b/Sternwarte_Darmstadt_HDR_Panorama_10MB_-_Photographed_by_James_Breitenstein.jpg")

.on('response',(ok)=>{
jo.responseHeaders = ok.headers;})

.on('data',(ok)=>{
size+=ok.length;
if (size > maxLength){
console.log("DATA",size);resolve(jo.response);jo.abort();}})

.on('end',function(ok){console.log("END");})})

.then(function (ok) {
    console.log("ok then",ok)
})
.catch(function (err) {
  console.log("error",err)

});
...