0
我有一个问题,我试图解决在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
});
“所以基本上,你想执行3顺序延期,并在第一次成功后停止”。 这取决于。逻辑是,函数调用是运行一个Ajax函数并返回的通用函数(在本例中为getData()。如果这样,一切都应该结束,如果失败,它会尝试调用loginUser()函数(会尝试登录用户),如果该函数失败......全部失败,如果有效,第一个尝试失败的函数(在这种情况下,getData())将再次运行,如果失败了。如果它工作...那么一切都很好 – Juw
谢谢你的回答,并花时间在原始文章中,你写了与我完全相同的代码,只有我在函数中使用它并使用窗口[func]()能够调用任何函数(返回一个待处理的ajax延迟对象)。但是这引发了一个问题。我可以依靠dfd在主代码和延期完成后返回。 。检查出我提出的这个简化函数: http://stackoverflow.com/questions/12386728/deferre d-对象返回-IT-被拒绝的前 - -或分辨 – Juw