猿问

js的promise如何递归调用?

有一个通过ajax获取长列表的需求,因为不知道列表总长度,所以一次ajax获取100,递归调用ajax函数直到返回为空为止。

用callback形式的ajax很好做


//假如用jQuery

function 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该怎么写?


ABOUTYOU
浏览 1467回答 2
2回答

MMMHUHU

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)我猜大概可以这样,可以验证下
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答