首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在javascript/jquery中按顺序解析promise

在javascript/jquery中按顺序解析promise
EN

Stack Overflow用户
提问于 2017-08-29 20:38:27
回答 1查看 310关注 0票数 0

我有几个函数需要按顺序执行,

代码语言:javascript
运行
复制
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()

代码语言:javascript
运行
复制
$.when(home(),options(),inclusions()).done(function(a,b,c) {
  console.log(a,b,c);
})

但是它不是按顺序调用函数的,请在这里给我一个建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-30 07:35:24

看起来你需要做的就是正确地链接这些承诺

代码语言:javascript
运行
复制
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
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45939394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档