我写了下面的剧本。它用于与后端服务进行通信。当我调用'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工作的异步方式,有没有办法解决这个问题?
答案 0 :(得分:0)
心跳功能没有返回语句。 (它所做的一件事是使用函数表达式创建一个函数,并且该函数表达式有一个return语句,这可能是混淆的来源)。