За да използвате методите .then()
или .done()
на jQuery отложени или обещания, вашата функция трябва да върне обещание. Обещанието има тези методи.
Така че, ако loadLevelObjects()
върне обещание, тогава можете да направите:
loadLevelObjects().done(function() {...})
Ако loadLevelObjects()
не е асинхронен, тогава няма нужда да използвате .done()
, тъй като можете просто да пишете код последователно:
loadLevelObjects();
// next line of code here
doSomethingElse();
Асинхронните функции (предимно ajax в Javascript от страна на клиента) вече връщат обещание в jQuery, така че можете директно да използвате това обещание, без да създавате свое собствено:
$.ajax(...).done(function() {...});
Или, ако извикването на ajax е вътре във функция, можете да върнете обещанието от функцията:
function loadLevelObjects(arg1, arg2) {
// do some processing of arguments here
return $.ajax(...)
}
loadLevelObjects(...).done(function(result) {
// code here when loadLevelObjects async ajax call is done
});
Важното е да разберете, че обещанията нямат магия. Методите .then()
и .done()
са методи на обещаващ обект. Така че, ако искате да ги използвате при извикване на функция, тогава тази функция ТРЯБВА да върне обект на обещание и този обект на обещание трябва да бъде разрешен или отхвърлен, когато основната функция е готова. За повечето случаи в jQuery от страна на клиента не е нужно да създавате свое собствено обещание или ръчно да го разрешавате или отхвърляте, тъй като можете просто да използвате обещанията, които jQuery вече създава, когато извършва асинхронна операция.
person
jfriend00
schedule
10.12.2014