3

我试图掌握 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() {

    }

}
4

1 回答 1

6

这是您示例的简化现场演示:http: //jsfiddle.net/L96cD/

您的代码中缺少什么:

1/ 你需要传入 resolve 第二个函数的参数:

d.resolve(data);

2/ 你需要返回延期的:

return d;

注意:在实践中,您会在解决之前返回 deferred(因此得名)。此外,延迟是内置在一些方法中的,比如 ajax 调用。

于 2013-03-01T06:25:56.947 回答