From ae6355bcd38060ff4a989afba28ef8d313787fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?vvdenniswu=28=E5=90=B4=E6=B2=9B=E9=9C=96=29?= Date: Thu, 11 Jun 2020 22:27:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BC=82=E6=AD=A5=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=A1=88=E4=BC=9A=E5=AF=BC=E8=87=B4=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E8=B6=85=E6=97=B6timer=E8=A7=A6=E5=8F=91=EF=BC=8C?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E5=8E=9F=E6=9C=89=E5=90=8C=E6=AD=A5=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=EF=BC=8C=E4=BD=86=E6=98=AF=E5=A2=9E=E5=8A=A0break?= =?UTF-8?q?=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/easy_sock.js | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/lib/easy_sock.js b/lib/easy_sock.js index 71ca74e..e4e6515 100644 --- a/lib/easy_sock.js +++ b/lib/easy_sock.js @@ -71,19 +71,22 @@ Easysock.prototype.isAlive = false; * 对外的获取数据的接口方法 * @param {[Array]} data [任意类型,会直接传给encode函数] * @param {[Function]} callback [回调函数(err, data)] + * @param {[Boolean]} neverPush 默认false, 当socket未ready时会压入等待队列,true时不再压入,直接抛错 * @return {[string]} [发送方式,wait等待socket连接,create创建socket,write复用socket] */ -Easysock.prototype.write = function(data, callback){ +Easysock.prototype.write = function(data, callback, neverPush){ var self = this; //当在这两个状态的时候,先保留请求,等连接成功后再执行 if (this.between_connect || this.between_close){ - - this.tmpGetTaskList.push(function(err){ + if (neverPush) { + return callback(new Error('socket losted!')); + } + this.tmpGetTaskList.push(function(err, assertReady){ if (err){ callback(err); } else{ - self.write(data, callback); + self.write(data, callback, assertReady); } }); return 'wait'; @@ -221,20 +224,10 @@ function initSocket(cur){ cur.between_connect = false; //外部有可能会在发起连接但还没完成的时候发起请求,所以,把积累的请求都发了 - /* let get; + let get; while(get = cur.tmpGetTaskList.shift()) { - get(); - } */ - - function asyncWhile() { - cur.tmpGetTaskList.shift()(); - setTimeout(function () { - if (cur.tmpGetTaskList.length) { - asyncWhile(); - } - }) + get(null, true); } - asyncWhile(); }).on('data', function(data) { if (!data || !Buffer.isBuffer(data) || data.length <= 0 ){