我有三个函数,我试图运行,前两个正在做一些异步的东西,需要第三个使用的数据。我希望第三个函数仅在1和2都完成时触发。这是一般结构,但最终的功能是在1和2完成之前发射。jquery自定义递延函数
function run() {
var data1 = {};
var data2 = {};
$.when(first(), second()).done(constructData());
function first() {
var d = new $.Deferred();
//do a bunch of stuff async
data1 = {};
d.resolve();
}
function second() {
var d = new $.Deferred();
//do a bunch of stuff async
data2 = {};
d.resolve();
}
function constructData() {
//do stuff with data1 and data2
}
}
答案是不调用构造数据立即
$.when(first(), second()).done(constructData);
不立即调用构造数据的伎俩感谢! – Brian 2013-02-22 08:14:55
哇,不知道这个函数可以写在延期对象里面,谢谢! – Denis 2013-10-04 14:00:15
@Denis我不认为这是正确的做法。根据jQuery [docs](https://api.jquery.com/jquery.deferred/):'beforeStart'参数是_“一个在构造函数返回之前调用的函数。”_。因此,在创建延迟对象之前调用该函数。 – 2016-12-30 11:56:05