一种常见的javascript库的语法

我们在给angular做拦截器的时候会用到这样的语法。


$httpProvider.responseInterceptors.push('myResponseInterceptor');

myModule.factory('ybResponseInterceptor', ['$window', '$filter', '$q', '$injector', 'securityRetryQueue',
 'myConfig', '$timeout',  
function ($window, $filter, $q, $injector, queue, ybConfig,$timeout) {
        return function (promise) {
            // Intercept failed requests
            return promise.then(function (response) {...}
                         ...



 
我很好奇这个promise是怎么来的,为什么会无缘无故的传一个promise进来。于是我请教了大神,大神是这么告诉我的: 

我们经常会写这样的代码。

在一个函数里面用另一个函数做一些例如过滤之类的操作

function UpdateCounter(success){
    convert(success);
    if(success === true){
        //...
    }else{
        //...
    }
}

function convert(success){
    if( success === "true" ||success == 1)
    {
        return true;
    }
    return false;
}


我们在上面的函数里面调用了convert函数,调用的时候传了一个success参数。

在自己的代码里面这样写ok,但是如果要写一个开源库的话,这样写太low,而且可扩展性不好,所以我们应该这样写。


function UpdateCounterServer() {
    var convert = [];

    function fn_updateCounter(success) {
        convert.forEach(function (cb) {
            cb(success)
        });
        if (success === true) {
            //...
        } else {
            //...
        }
    }

    function fn_convert(cb){
        convert.push(cb);
    }
    return{
        PushConverter: fn_convert,
        UpdateCounter: fn_updateCounter
    }
}
UpdateCounterServer.PushConverter(convert);
UpdateCounterServer.UpdateCounter("true");


function convert(success) {
    if (success === "true" || success == 1) {
        return true;
    }
    return false;
}

在UpdateCounterServer函数中,我们定义了fn_convert函数用来接收一个函数队列,这里的cb就是接收的函数名称指针。然后在fn_updateCounter函数中我们首先对success参数进行一系列的过滤,如何过滤,就是使用 fn_convert函数接收的函数队列中的函数来过滤的。这是库的写法。

在下面执行的时候我们先把自己定义的convert函数放到函数队列中,然后运行updateconter()。

ok,到了这一步,我们可以进一步模拟实际情况中我们的用法,将convert函数也来封装一下。

function ConvertServer() {
    function convert(success) {
        if (success === "true" || success == 1) {
            return true;
        }
        return false;
    }

    return {
        Convert: convert
    }
}

UpdateCounterServer.PushConverter(ConvertServer.Convert);
UpdateCounterServer.updateCounter("true");

到这里我们可以看到ConvertServer中的convert函数传了一个success,这个success如果单独放在我们自己的代码里面看就会很奇怪,但是结合公共库的代码就很容易理解了。

从这里我们也可以学到公共库文件的一种写法,将对外的接口要抽象出来。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值