我有三個函數,我試圖運行,前兩個正在做一些異步的東西,需要第三個使用的數據。我希望第三個函數僅在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