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

多层回调嵌套,并且嵌套上层循环里,如此最后的方法必须等之前的回调都执行完了才能执行,如此同步的代码,应该怎么弄呢?求大神指点!!

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层循环。

}


BIG阳
浏览 643回答 1
1回答

呼唤远方

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,自己试着写一下吧});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript