发送ajax请求时返回语句问题

时间:2014-10-22 12:25:50

标签: javascript jquery asynchronous

我写了下面的剧本。它用于与后端服务进行通信。当我调用'heartbeat'方法时会出现问题。问题可能是由JavaScript异步引起的。

我已经使用了“完成”的承诺,所以请求应该在我返回true或false之前完成。截至目前,“心跳”在评估时尚未定义。

/**
 * This module is used to communicate with the backend.
 */
var Backend = (function() {

    /**
     * Default settings for the Backend module.
     * @type {[Object]}
     */
    var settings = {
        api: 'https://www.domain.tld/api'
    };

    /**
     * This is used to create a request against the backend.
     * @param  {[String]} method   The HTTP method to be used.
     * @param  {[String]} endpoint Endpoint to target.
     * @return {[Object]}          Returns the XHR request.
     */
    var request = function(method, endpoint) {
        req = $.ajax({
            url: settings.api + endpoint,
            type: method
        });

        return req;
    };

    return {

        /**
         * Check the backend status.
         * @return {[Bool]} Returns true or false - depending on the status.
         */
        heartbeat: function() {
            var req = request('get', '/heartbeat');

            req.done(function(data) {
                if(data.status == 'alive') {
                    return true;
                } else {
                    return false;
                }
            });
        }
    }

})();

我正在执行以下操作来调用该方法:

var backend = Backend();
var heartbeat = backend.heartbeat();

heartbeat
'undefined'

'heartbeat'变量未定义的原因是什么?是因为JavaScript工作的异步方式,有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

心跳功能没有返回语句。 (它所做的一件事是使用函数表达式创建一个函数,并且该函数表达式有一个return语句,这可能是混淆的来源)。