2013-03-01 50 views
1

我想抓住jQuery中的延期对象,但仍然遇到麻烦。基本上,我有一系列我想运行的函数,其中函数1的结果表示第二个函数中的逻辑。我不确定是否必须在某处调用管道方法,或者只是使用then(),但是不管怎样,我都会失败。如果你看第一个函数,有一个名为data的对象,我想传递给第二个函数。在jQuery的延期对象之间发送数据

function run() { 
    var data1 = {}; 
    var data2 = {}; 

    var body = $('body'); 

    $.when(first()).then(second()).done(constructData); 

    function first() { 
     var d = new $.Deferred(); 



     var data = {} //arbitrary data set that i want to send to second 

     data.message = 'first message'; 
     data.id = 1234; 

     body.append('First done'); 

     //return data object? add it to the resolve method? 
     d.resolve(); 
    } 

    function second(data) { //how do I get this data object? 

     var d = new $.Deferred(); 


     body.append('Data from first:'); 

     body.append('Second done'); 

     d.resolve(); 
    } 
    function constructData() { 

    } 

} 

回答

6

这里就是你们的榜样的简化,现场演示:http://jsfiddle.net/L96cD/

缺什么在你的代码:

1 /你需要通过在解决第二个函数的参数:

d.resolve(data); 

2 /你需要返回延期:

return d; 

注意:实际上,您将在解析之前返回延迟(因此名称)。此外,延迟是建立在一些方法,如ajax调用。

+0

完美谢谢你 – Brian 2013-03-01 06:44:25