我正在尝试抓住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() {
}
}
答案 0 :(得分:6)
以下是您的示例的简化实时演示:http://jsfiddle.net/L96cD/
您的代码中缺少什么:
1 /你需要传入解决第二个函数的参数:
d.resolve(data);
2 /你需要退回延期:
return d;
注意:在实践中,您将在解析之前返回延迟(因此名称)。此外,延迟是在一些方法中构建的,如ajax调用。