У меня есть проблема, которую я пытаюсь решить, используя отложенные объекты в javascript (и я новичок в отложенных объектах).
Проблема: пользователь пытается запустить функцию (может быть много разных функций). Если функция не работает... она попытается снова войти в систему, а затем повторить попытку (один раз). Если авторизация не удалась. Ну тогда все терпит неудачу.
Эти функции и функция входа в систему содержат вызов Ajax, который будет возвращен.
Мой вопрос: могу ли я полагаться на то, что var dfd (в конце функции tryAjax) будет выполняться последним после того, как весь другой код в функции будет запущен?
Вот код:
function tryAjax(func)
{
var dfd = new jQuery.Deferred();
window[func]().then(
function(p1,p2,p3)
{
//Everything worked great. No need to login.
dfd.resolve(p1,p2,p3);
},
function()
{
//func failed
//try to login user again before trying.
loginUser().then(
function()
{
//Login success
//Try to run func again.
window[func]().then(
function(p1,p2,p3)
{
//Func succes after login
dfd.resolve(p1,p2,p3);
},
function(p1,p2,p3)
{
//Func failed after login
dfd.reject(p1,p2,p3);
});
},
function(p1,p2,p3)
{
//Login failed
dfd.reject(p1,p2,p3);
});
});
return dfd;
}
And to call it:
tryAjax('getData').then(
function(p1,p2,p3)
{
//Success
},
function(p1,p2,p3)
{
//Error
});