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 ){