var angular = require('angular'),
  _ = require('jsUtil');

require('../modules');

angular
  .module('linker.services')
  .factory('mulCallAsynchronousResult', mulCallAsynchronousResult);

/** @ngInject */
function mulCallAsynchronousResult() {
  return {
    mcar: mcar
  };

  /**
   * 防止多次连续调用时返回的promise并不是最新
   * @param  {Function} fn       可以返回promise的异步调用方法
   * @param  {Function}   successFn promise成功后调用的方法
   * @param  {Function}   failedFn  promise失败后调用的方法
   * @return {Function}  返回的是一个fn
   */
  function mcar(fn, successFn, failedFn) {
    var context = this;
    var count = 0;
    return function() {
      var promise = fn.apply(context, arguments),
        currentCount = ++count;
      promise.then(function(data) {//成功
        if(currentCount === count) {
          successFn && successFn(data);
        }
      }, function(error) { //失败
        if (currentCount === count) {
          failedFn && failedFn(error);
        }
      });
    }
  }
}
