javascriptで遅延オブジェクトを使用して解決しようとしている問題があります(遅延オブジェクトは初めてです)。
問題: ユーザーが関数を実行しようとします (さまざまな関数が多数存在する可能性があります)。関数が失敗した場合...再度ログインを試みてから、再試行します (1 回)。ログインに失敗した場合。それでは、すべて失敗します。
これらの関数とログイン関数には、返される 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
});