javascript - 传递的函数有一个变量不起作用

标签 javascript

我有以下 javascript,但现在收到错误:Uncaught TypeError:responseHandler 不是函数

var Message = {
    initialMessageList: function(profile_id) {
            $('.messages-list profile'+ profile_id).html = '<div class="message-loader profile"+ profile_id><i class="fa fa-spinner fa-spin"></i></div>';
            Message.fetchMessageList(profile_id, Message.initialMessageListHandler('', profile_id));
        }

        initialMessageListHandler: function(data, profile_id) {
            $('.messages-list .message-loader profile'+ profile_id).remove();
            $('.messages-list profile'+ profile_id).html(Message.getMessageListHtml(data));
            Message.bindMessageList();
            $('.open-message profile'+ profile_id).first().click();
        },

        fetchMessageList: function(query, responseHandler) {
            $.ajax({
                url: '/app/messages/fetch/' + query,
                dataType: 'json',
                method: 'get'
            })
                .done(function(response) {
                    responseHandler(response); <--- this is the line it errors on
                })
                .fail(function(jqXHR) {
                    if (jqXHR.status == 403) {
                        window.location = '/';
                    } else {
                        responseHandler([]);
                    }
                });
        },

这是更改后的:

initialMessageList: function(profile_id) {
        $('.messages-list profile'+ profile_id).html = '<div class="message-loader profile"+ profile_id><i class="fa fa-spinner fa-spin"></i></div>';
        Message.fetchMessageList(profile_id, Message.initialMessageListHandler);
    },

    initialMessageListHandler: function(data) {
        $('.messages-list .message-loader ').remove();
        $('.messages-list ').html(Message.getMessageListHtml(data));
        Message.bindMessageList();
        $('.open-message ').first().click();
    },

    fetchMessageList: function(query, responseHandler) {
        $.ajax({
            url: '/app/messages/fetch/' + query,
            dataType: 'json',
            method: 'get'
        })
            .done(function(response) {
                responseHandler(response);
            })
            .fail(function(jqXHR) {
                if (jqXHR.status == 403) {
                    window.location = '/';
                } else {
                    responseHandler([]);
                }
            });
    },

最佳答案

您收到错误是因为您没有传入函数,而是传入被调用函数的结果,这就是添加括号时发生的情况。

fetchMessageList(profile_id, Message.initialMessageListHandler('', profile_id));

fetchMessageList: function(query, responseHandler) {
    responseHandler(); // error, "undefined"
}

注意你是如何调用initialMessageListHandler的,它没有返回值,所以它返回未定义,所以你真正做的是

fetchMessageList(profile_id, undefined);

fetchMessageList: function(query, responseHandler) {
    responseHandler(); // error, "undefined"
}

你应该做的是

fetchMessageList(profile_id, function() {
    Message.initialMessageListHandler('', profile_id)
});

当您必须传递这样的参数时,使用匿名函数作为包装器

关于javascript - 传递的函数有一个变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570729/

相关文章:

javascript - farbtastic 插件回调函数

javascript - 响应时如何更改topnav中的Awesome Icons位置

javascript - AngularJS dataTable,$http get 不起作用

javascript - Java Date 时区打印不同年份的不同时区,需要解决方法

javascript - ESLint 不了解 Element UI 的组件

javascript - 尝试将此函数包装在一个对象中

javascript - 在 HTML 页面中的 PDF 文档上添加触摸目标

javascript - 页眉没有填满整个页面?

javascript - $q.defer() then 的 then

javascript - 如何调用对象文字中作为参数接收的方法