Функция не возвращает значение, потому что return
в вашем методе встроены в функции обратного вызова. Они возвращаются только из этих обратных вызовов, а не из вашей основной функции. Рассмотрим, например, ваш «успешный» обратный вызов:
success: function(response) {
resultz2 = 1;
return resultz2;
}
Это return
только что вернулось из функции success
... Оно не всплывает до вашей функции updateStringCall
.
Причина, по которой он должен работать таким образом, заключается в том, что вызовы ajax являются асинхронными. Ваш метод возвращает немедленно , пока запрос происходит в фоновом режиме. Поэтому, чтобы получить возвращаемое значение, вы должны передать обратный вызов, у которого есть доступ к значению, когда он будет готов, а затем вызвать обратный вызов из обратных вызовов ajax вместо возврата значения.
Поэтому измените определение вашего метода следующим образом:
// Note I added a "callback" parameter
function(pdebtID, pcolumn2Change, pvalue2Change, pmin, pmax, callback) { ... }
А затем в ваших обратных вызовах ajax, вызовите его вместо возврата значения:
success: function(response) {
resultz2 = 1;
callback(resultz2);
},
error: function(jqXHR, textStatus, errorThrown) {
resultz2 = 0;
callback(resultz2);
});
Наконец, передайте обратный вызов при вызове этого метода:
nsEditor.updateStringCall(debtID, column2Change, value2Change, 4, 10, function(resultz) {
// Do something with resultz
});
И последнее замечание: если вы собираетесь использовать это одеяло, вы должны изменить это, чтобы использовать также обратный вызов:
catch (e) {
resultz2 = 0;
callback(resultz2);
}
Но на самом деле, я бы рекомендовал просто взять эту попытку / поймать все вместе. Я не вижу, как это может быть полезным здесь. Это будет скрывать только реальные проблемы с кодом, который уже имеет лучшую структуру для обработки ошибок. Я подозреваю, что вы просто добавили туда, чтобы отладить эту проблему возврата, но если она уже была, просто удалите ее.
Это мир функционального программирования, управляемого событиями! Это очень распространенная структура в JavaScript.