Javascript 在jquery延迟对象之间发送数据

Javascript 在jquery延迟对象之间发送数据,javascript,jquery,jquery-deferred,deferred,Javascript,Jquery,Jquery Deferred,Deferred,我试图抓住jquery中的延迟对象,但一直在遇到麻烦。基本上,我有一系列我想要运行的函数,其中函数1的结果决定了第二个函数中的逻辑 我不确定是否必须在某个地方调用管道方法,或者只使用then(),但无论哪种方式,我都会失败。如果你看第一个函数,有一个名为data的对象,我想传递给第二个 function run() { var data1 = {}; var data2 = {}; var body = $('body'); $.when(first()).

我试图抓住jquery中的延迟对象,但一直在遇到麻烦。基本上,我有一系列我想要运行的函数,其中函数1的结果决定了第二个函数中的逻辑

我不确定是否必须在某个地方调用管道方法,或者只使用then(),但无论哪种方式,我都会失败。如果你看第一个函数,有一个名为data的对象,我想传递给第二个

 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() {

    }

}

以下是您的示例的简化实时演示:

您的代码中缺少什么:

1/您需要传入解析第二个函数的参数:

d.resolve(data);
2/您需要退回延期付款:

return d;
注意:在实践中,您将在解析延迟之前返回延迟(因此得名)。此外,延迟是在一些方法(如ajax调用)中构建的