UNPKG

coordinator-node-client

Version:

分布式协调服务node客户端,用于获取微服务的可用地址,参照eureka-js-client.

151 lines (135 loc) 4.54 kB
/** * Copyright (c) 2010-2015 EEFUNG Software Co.Ltd. All rights reserved. * 版权所有 (c) 2010-2015 湖南蚁坊软件有限公司。保留所有权利。 * Created by liwenjun on 2016/4/14. */ (function () { var async = { logger: null }; //仿async, https://github.com/caolan/async //// cross-browser compatiblity functions //// var _toString = Object.prototype.toString; var _isArray = Array.isArray || function (obj) { return _toString.call(obj) === '[object Array]'; }; function _isArrayLike(arr) { return _isArray(arr) || ( // has a positive integer length property typeof arr.length === "number" && arr.length >= 0 && arr.length % 1 === 0 ); } // capture the global reference to guard against fakeTimer mocks var _setImmediate = typeof setImmediate === 'function' && setImmediate; var _delay = _setImmediate ? function (fn) { // not a direct alias for IE10 compatibility _setImmediate(fn); } : function (fn) { setTimeout(fn, 0); }; if (typeof process === 'object' && typeof process.nextTick === 'function') { async.nextTick = process.nextTick; } else { async.nextTick = _delay; } async.setImmediate = _setImmediate ? _delay : async.nextTick; function _keyIterator(coll) { var i = -1; var len; var keys; if (_isArrayLike(coll)) { len = coll.length; return function next() { i++; return i < len ? i : null; }; } else { keys = _keys(coll); len = keys.length; return function next() { i++; return i < len ? keys[i] : null; }; } } var _keys = Object.keys || function (obj) { var keys = []; for (var k in obj) { if (obj.hasOwnProperty(k)) { keys.push(k); } } return keys; }; async.setLogger = function (logger) { async.logger = logger; }; async.eachOfSeries = function (urls, fn, callback) { callback = _once(callback || noop); urls = urls || []; var nextKey = _keyIterator(urls); var key = nextKey(); function iterate() { function innercallback(err, httpResponse, body) { if (err) { key = nextKey(); if (key === null) { if (async.logger) { async.logger.debug("协调中心没有可用服务!"); } //返回错误信息 callback(err, httpResponse, body); } else { //立即执行 iterate(); } } else { //返回正确信息 callback(err, httpResponse, body); } } if (key === null) { if (async.logger) { async.logger.debug("协调中心没有可用服务!"); } callback(new Error("协调中心没有可用服务!")); } else { if (async.logger) { async.logger.debug("调用第" + (key + 1) + "个服务实例:" + urls[key]); } fn(urls[key], innercallback); } } iterate(); }; function only_once(fn) { return function () { if (fn === null) throw new Error("Callback was already called."); fn.apply(this, arguments); fn = null; }; } function _once(fn) { return function () { if (fn === null) return; fn.apply(this, arguments); fn = null; }; } // Node.js if (typeof module === 'object' && module.exports) { module.exports = async; } // AMD / RequireJS else if (typeof define === 'function' && define.amd) { define([], function () { return async; }); } // included directly via <script> tag else { root.async = async; } }());