我有几个函数需要按顺序执行,
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(),依此类推,我有像这样的$.when()
$.when(home(),options(),inclusions()).done(function(a,b,c) {
console.log(a,b,c);
})但是它不是按顺序调用函数的,请在这里给我一个建议。
发布于 2017-08-30 07:35:24
看起来你需要做的就是正确地链接这些承诺
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
});https://stackoverflow.com/questions/45939394
复制相似问题