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

js的promise如何递归调用?

js的promise如何递归调用?

ABOUTYOU 2019-03-21 18:15:02
有一个通过ajax获取长列表的需求,因为不知道列表总长度,所以一次ajax获取100,递归调用ajax函数直到返回为空为止。用callback形式的ajax很好做//假如用jQueryfunction get(p) {  $.get(url + "?page=" + p,function(data){    if(data.list.length) {        list.push(data.list);        page += 1;         get(page);    }  });}var list = [], page = 1 ,url= ".......";get(page)用promise该怎么写?
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

promise不是解决递归的,重点是pipeline,当然如果你知道总数的话大可以Promise.all()


但是如果硬要写的话只是把这个函数包起来就可以了,就是说你其实是一个函数,只干一个事情,可以给看做一个任务


function get(p, deferred) {

    deferred || deferred = Promise.defer();

  $.get(url + "?page=" + p,function(data){

    if(data.list.length) {

        list.push(data.list);

        page += 1; 

        get(page,deferred);

    }else{

        deferred.resolve(list)

    }

    return deferred.promise;

  });

}


get(1, null).then(console.log)

我猜大概可以这样,可以验证下


查看完整回答
反对 回复 2019-04-12
  • 2 回答
  • 0 关注
  • 1466 浏览
慕课专栏
更多

添加回答

举报

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