我有一个问题,我试图通过在 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
});