function n(e) { if (exports.emit("pick", "success"),!A) { if (e.fields && Array.isArray(e.fields)) S.ack = e.ack || S.ack, e.fields.forEach(function(e) { if (w[e.command]) w[e.command](e) } ); if (!A) exports.emit("pick", "response", { status: 0, bid: S.bid, session: S.session, seq: S.seq, ack: S.ack }) } } function r(e) { if (exports.emit("pick", "failure"),"offline" == e || "kicked" == e) exports.emit("error", "stop"); else if (!A) exports.emit("pick", "response", { status: 1, bid: S.bid, session: S.session, seq: S.seq, ack: S.ack }) } function o() { //超时操作 exports.emit("pick", "timeout"), clearTimeout(y); var e = v; // e为发出去的XMLHttpRequest对象 if (v = null ,e.abort(),!v) a() //轮询a();重新去取数据。 } //为什么要通过i封装一次,原因是提供统一接口。 function i(e, t, i, n, r) { if ("function" == typeof i) r = n, n = i; if (e == g.TYPE_HI) i = i || {}, i.session = S.session, i.seq = S.seq++; //调用ajax,也是对ajax的封装 return g.get(e, t, i, n, r) } function s(e, t) { return function() { var i = Array.prototype.slice.call(arguments); //闭包来判断私有静态变量b与返回的数据进行对比 if (e === b) { //有返回,清除y。 if (v = null ,clearTimeout(y),"success" == t) //调用成功 n.apply(null , i); else //调用失败 r.apply(null , i); //A初始时为false if (!A) setTimeout(function() { a() } , 0) } } } function a() { if (!v) //v初始为NULL b++, //b初始为0 v = i(g.TYPE_HI, "pick", { imuss: S.bid, ucid: S.ucid, ack: S.ack || "" }, //这里的b传递到回调函数中。 s(b, "success"), s(b, "failure")), //对发出的请求超时监控 y = setTimeout(o, C.PICK_TIMEOUT) }
时间: 2024-11-07 11:13:04