Чтобы использовать методы .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