Для предотвращения такого рода предупреждения, используйте функцию return
значение во всех случаях, или ни одного случая.На данный момент вы возвращаете значение только в одном if
случае;другие дела не вернут ничего.Вы можете даже return undefined
, чтобы предупреждение исчезло.Однако то, что он говорит вам, правильно: функция, которая иногда имеет возвращаемое значение, а иногда нет, немного странная и предполагает, что вы делаете что-то не так.
То, что вы, похоже, хотите сделатьЕсли внутренний метод return
в методе success
возвращает значение из метода detect()
. Это абсолютно невозможно. Внутренняя функция может возвращать только значение вызывающей стороне success
, которая является самим Prototype.К тому времени, когда это происходит, метод detect()
уже давно вернулся.
Здесь у вас есть асинхронный код.Метод detect()
может настроить запрос AJAX, но затем он должен немедленно вернуться к своему вызывающему, который вернет управление браузеру.Через некоторое время HTTP-запрос после AJAX-вызова завершится, и , а затем сработает функция success
.JavaScript не может вызывать асинхронный код синхронно или наоборот.
Что вам нужно сделать, это передать функцию обратного вызова в ваш метод, а затем вызвать ее обратно при завершении:
Prometheus.DeviceRequestHelper.detect(request_id, function(response) {
// do something with `response`
});
myApp.DeviceRequestHelper= {
detect: function(request_id, callback) {
...
Ext.Ajax.request({
...
success: function(xhr) {
var result= Ext.decode(xhr.responseText);
if (result.success)
callback(result);
...
},
...
});
},
...
};
(Iубрал лишнюю пару Ext.encode
-> Ext.decode
, которая кажется пустой тратой времени.)