为了账号安全,请及时绑定邮箱和手机立即绑定

多层回调嵌套,回调后拿到结果再执行下文

多层回调嵌套,回调后拿到结果再执行下文

BIG阳 2019-02-04 13:12:17
多层回调嵌套,并且嵌套上层循环里,如此最后的方法必须等之前的回调都执行完了才能执行,如此同步的代码,应该怎么弄呢?求大神指点!!function a() {  var j = [a, b, c, d, e] b(j)}function b(j) {  j.each(function(item) {    $.ajax({      url: '/web/sendsms',      data: {        key: item      },      traditional: true,      success: function(data) {        if (data && data.code !== 700) {          c(data)        }      }    });  })}function c(data) {  var datas = [] $.ajax({    url: '/web/sendsms/name',    data: {      name: data.key    },    traditional: true,    success: function(data) {      if (data && data.code !== 700) {        datas.push(data)      }    }  });  return datas}function d() {  //拿到总的数据,就是所有循环获取到的datas的数组,然后去重,所以这个方法只能在上面都拿到数据后才能执行,并且不能作为 c 方法的回调函数,因为c嵌套了2层循环。}
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

promise是好用的,我用promise改造了下你的代码
reject 的情况没考虑,你再改改吧

function getFirst(item) {

  return new Promise(function (resolve, reject) {

    $.ajax({

      url: '/web/sendsms',

      data: {

        key: item

      },

      traditional: true,

      success: function (data) {

        if (data && data.code !== 700) {

          resolve(getSecond(data));

        }

      }

    });

  })

}


function getSecond(item) {

  return new Promise(function (resolve, reject) {

    $.ajax({

      url: '/web/sendsms/name',

      data: {

        name: item.key

      },

      traditional: true,

      success: function (data) {

        if (data && data.code !== 700) {

          resolve(data)

        }

      }

    });

  }

}


var promises = ['a', 'b', 'c', 'd', 'e'].map(function (item) {

  return getFirst(item);

});


Promise.all(promises).then(function (datas) {

  console.log(datas)

}).catch(function (reason) {

  // 这里没写 reject,自己试着写一下吧

});


查看完整回答
反对 回复 2019-02-20
  • 1 回答
  • 0 关注
  • 640 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信