2012-11-20 34 views
2

我遇到了一个问题,我的链接返回的数据是第一个延期数据。第一个示例:Jquery链接时延迟的对象问题。然后

api.getData().done(function(data){ 
    api.getData2().done(
    function(data2){ 
     $.log('success', data2); 
    }); 
    }); 

但第二个例子SHOULD工作,具有第二。那么数据2(),但由于某种原因它一样DATA1。

api.getData().then(function(data1){ 
    return api.getData2(); 
}).then(
function(data2){ 
    $.log('success', data2); 
}); 

有什么建议吗?

+1

你能张贴'代码api.getData2'?如果我没有记错,'api.getData2'必须返回一个promise对象才能正常工作,并且它还必须在某个时刻解析deferred对象。我自己有过这个问题。 –

回答

1

因此,一些研究JQuery Deferred.Pipe后,我发现我做不到链。于是,而是需要使用管道像下面(.pipe()是可链接):

api.getData().pipe(function(data1){ 
    return api.getData2(); 
}).then(
function(data2){ 
    $.log('success', data2); 
}); 
+0

此外,您可以使用.then完成链接(相当于.done和.fail) – Lucas

1

$.when将接受返回一个承诺两个异步功能和执行当两者都做了。那么()函数:

$.when(api.getData(), api.getData2()).done(function(data, data2) { 
    $.log('success', data2); 
}); 

如果由于某种原因(如需要的数据),你需要前执行getData()getData2(),真的不需要.then(),因为你的第一个例子似乎足够有效吗?