У меня проблема, связанная с асинхронным выполнением Javascript. Я пытаюсь установить значение переменной с помощью функции, а затем сразу же использовать эту переменную в вызове функции. Я хочу реализовать JQuery .when и .hen для решения этой проблемы, но у меня возникают проблемы с тем, как выполнить обещание, необходимое для .then, чтобы знать, когда начинать выполнение.
Вот что у меня есть:
function addSerialNumber(item_id) {
var serialNumberList;
var serialNumber = $("serial-number").val();
$.when(serialNumberList = addSerialFunc(item_id, serialNumber))
.then(alert("Serial number successfully added."),
insertTransaction(item_id, serialNumberList));
}
function addSerialFunc(item_id, serialNumber) {
var serialNumberList = new Array();
$.ajax({
type: "post",
url: "someRandom.jsp",
data: {wsFunction: "Insert", item_id: item_id, serialNumber: serialNumber},
async: false
}).done(function(xml){
$(xml).find("Item").each(function() {
insert_id = ($(this).find("SendBack_CD").text());
if (!runError(insert_id, item_id)) {
//Fail
} else {
//Success
serialNumberList.push(insert_id);
}
})
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log("Error occured! Type: " + textStatus + " HTTP Error Thrown: " + errorThrown);
});
return serialNumberList;
}
Я пытаюсь создать serialNumberList путем вызова addSerialFunc (), а затем использовать serialNumberList в качестве аргумента для insertTransaction (). Иногда это работает, но я периодически получаю
Uncaught TypeError: Cannot read property 'substring' of undefined
потому что он пытается выполнить insertTransaction () до того, как serialNumberList будет заполнен addSerialFunc ().
Как я могу реализовать обещание в addSerialFunc (), чтобы .then знал, когда начинать выполнение?