javascript - 当资源太大时,如何绑定事件处理程序以请求关闭套接字的承诺?
问题描述
使用 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")
});;
解决方案
我已经成功地使用了 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)
});
推荐阅读
- azure-devops - 从父项继承字段值的子工作类型
- apache-spark - 如何从 apache spark 的外部文本文件中读取 structType 模式?
- c++ - Ray-AABB 交集函数的类隶属关系
- ios - 将 CMSampleBuffer 转换为 AVAudioPCMBuffer 以获取实时音频频率
- python - Python3:尝试连接具有不同日期时间索引列类型的两个数据帧时间序列
- c# - WPF文本框闪烁
- ruby - 如何设置可以在 Rails 的控制器和模型中访问的“全局”变量
- gitlab - gitlab-runner 使用目录路径而不是 URL 来克隆;失败并显示“似乎不是 git 存储库”
- css - 使用 Flexbox 获取所有可用高度的组件(在 Quasar/Vue 中)
- javascript - 这些时间戳有什么区别?