Javascript 建议如何减少冗余js代码

Javascript 建议如何减少冗余js代码,javascript,Javascript,我有一堆自定义回调函数,可以由更通用的回调函数处理。我知道如何创建一个泛型函数来处理成功或失败的api调用,但是有没有一种方法可以通过自定义回调来实现呢?我会给自己一个处理回调的callApi的包装器或版本。这是一个包装器: //Links to jsfiddle must be accompained by code var customApi = { feeds: { getFeedActivities(feedName, feedId, callba

我有一堆自定义回调函数,可以由更通用的回调函数处理。我知道如何创建一个泛型函数来处理成功或失败的api调用,但是有没有一种方法可以通过自定义回调来实现呢?

我会给自己一个处理回调的callApi的包装器或版本。这是一个包装器:

//Links to jsfiddle must be accompained by code
var customApi = {
        feeds: {
            getFeedActivities(feedName, feedId, callback) {
                function good(data) {
                    return callback(data);
                }

                function bad(result) {
                    return callback(null);
                }
                var url = `${origin}/api/feeds/${feedName}/${feedId}`;
                callApi(url, null, _GET, good, bad);
            },
            getUserFeedActivities(userId, callback) {
                return getFeed('User', userId, callback);
            },
            followFeed(feedName, feedId, callback) {
                function good(data) {
                    return callback(data);
                }

                function bad(result) {
                    return callback(null);
                }
                var url = `${origin}/api/feeds/${feedName}/${feedId}`;
                callApi(url, null, _GET, good, bad);
            }
        },

        media: {
            uploadTemp: function(model, callback) {
                function good(data) {
                    return callback(data);
                }

                function bad(result) {
                    return callback(null);
                }
                var url = origin + "/api/media?type=photo";
                callApi(url, model, _POST, good, bad);
            },
        },
        //
然后followFeed变成:


除了JSFIDLE之外,请使用[]工具栏按钮,这样您的问题的全部内容就在这里,人们不必离开现场就可以看到您问题的全部内容。例如:callApi看起来像什么?@t.J.Crowder没有更多的上下文。@Barmar::-|更糟糕。为什么要将callbackresult包装在函数中而不是直接回调给callApi?@NathanP.:这是防守。可以直接向callApi提供回调,但我们必须了解更多信息才能确定。在上面的例子中,回调肯定是用默认的this和一个参数调用的,这正是OP代码所做的。如果我们将其正确地传递给callApi,我们需要知道callApi也会这样做,或者回调不会注意它接收到的其他参数,也不关心这是什么。您可能已经看到了经典错误:[1,2,3].mapparseInt:-如果我们正确地将其传递给callApi,对不起,输入错误,如果我们将其直接传递给callApi,应该是这样的,我明白了;谢谢,我没有想到回调实现。
function callApi2(url, model, method, callback) {
    return callApi(
        url,
        model,
        method,
        function(result) {
            return callback(result);
        },
        function() {
            return callback(null);
        }
    );
}
followFeed(feedName, feedId, callback) {
    var url = `${origin}/api/feeds/${feedName}/${feedId}`;
    callApi2(url, null, _GET, callback);
}