首页 > 解决方案 > 当资源太大时,如何绑定事件处理程序以请求关闭套接字的承诺?

问题描述

使用 request-promise 我想知道当资源超过 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") 
});;

标签: javascriptnode.jsxmlhttprequestrequest-promise

解决方案


我已经成功地使用了 stand request 包并将其包装在一个 Promise 中。我希望使用 request-promise 因为我的代码中已经有很多嵌套块:

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)

});

推荐阅读