2017-08-29 16 views
0

我有幾個功能,需要按順序執行,解決的JavaScript/jQuery的

function home() { 
    var home = document.getElementById('home'); 
    html2canvas(home).then(function(canvas) { 
    home.appendChild(canvas); 
    var basic = canvas.toDataURL(); 
    var item = {}; 
    item["image"] = basic; 
    item["width"] = 595; 
    data_1.push(item); 
    }); 
} 

function options() { 
    var temp_cnt = 0; 
    $('.tour_options_table_data_info').each(function(index, element) { 
    html2canvas(element).then(function(canvas) { 
    element.appendChild(canvas); 
    elem = canvas.toDataURL(); 
    var item = {}; 
    item["image"] = elem; 
    item["width"] = 595; 
    data_1.push(item); 
    }); 
}); 
} 

function inclusions() { 
    $('.inc-main1,.inc-main2,.inc-main3').each(function(index, element) { 
    html2canvas(element).then(function(canvas) { 
    element.appendChild(canvas); 
    elem = canvas.toDataURL(); 
    var item = {}; 
    item["image"] = elem; 
    item["width"] = 595; 
    data_1.push(item); 
    }); 
}); 
} 

function home()應首先調用,options()應該調用2,等等 我$.when()喜歡

$.when(home(),options(),inclusions()).done(function(a,b,c) { 
    console.log(a,b,c); 
}) 

但它不會順序調用功能 請在這裏建議我一個方法。

+0

有沒有辦法,你打算這樣做。如果接下來需要來自一個請求的數據,那麼你將不得不依次執行它們 - 即。在回調中鏈接它們。 –

+0

@RoryMcCrossan我只是想按順序在'data_1'數組中推入數據,我的意思是首先它應該有'home()',那麼它應該有'options()'數據,是否有可能沒有鏈接它們的回調? –

+0

如果您可以識別數組中的每個請求的數據,以便它可以通過sort()運行,那麼是的,否則不可以。 –

回答

1

似乎所有你需要的是鏈上的承諾正確

function home() { 
    var home = document.getElementById('home'); 
    // return the promise, so you can chain it 
    return html2canvas(home).then(function(canvas) { 
     home.appendChild(canvas); 
     var basic = canvas.toDataURL(); 
     var item = {}; 
     item["image"] = basic; 
     item["width"] = 595; 
     data_1.push(item); 
    }); 
} 

function options() { 
    // create a promise to chain in .each 
    var ret = $.when(); 
    $('.tour_options_table_data_info').each(function(index, element) { 
     // chain the promises 
     ret = ret.then(function() { 
      html2canvas(element).then(function(canvas) { 
       element.appendChild(canvas); 
       elem = canvas.toDataURL(); 
       var item = {}; 
       item["image"] = elem; 
       item["width"] = 595; 
       data_1.push(item); 
      }); 
     }); 
    }); 
    // return the last promise 
    return ret; 
} 

function inclusions() { 
    // create a promise to chain in .each 
    var ret = $.when(); 
    $('.inc-main1,.inc-main2,.inc-main3').each(function(index, element) { 
     // chain the promises 
     ret = ret.then(function() { 
      html2canvas(element).then(function(canvas) { 
       element.appendChild(canvas); 
       elem = canvas.toDataURL(); 
       var item = {}; 
       item["image"] = elem; 
       item["width"] = 595; 
       data_1.push(item); 
      }); 
     }); 
    }); 
    // return the last promise 
    return ret; 
} 
home().then(options).then(inclusions).then(() => { 
    // data_1 has all the "items" in the order you need 
    // i.e. home item, n * options items, m * inclusions items 
});