Javascript 用承诺解析游标

Javascript 用承诺解析游标,javascript,node.js,Javascript,Node.js,我试图查询twitterapi,以便用户的追随者比较两者。我正在使用光标检索用户列表。我使用Promissions设置它,第一个get请求将用户的跟随者限制到一个极限,然后查找游标,将数据传递到数组中,然后使用游标的值解析为相同的循环函数,直到游标返回0,当这种情况发生时,我希望以res的形式发送所有内容。当我设置初始承诺并使用promise.all来解决它们并附加一个。然后,承诺。一切先解决。我尝试从循环函数中解析承诺,然后将另一个承诺返回到第一个函数,但我似乎无法让它工作。有什么想法吗 c

我试图查询twitterapi,以便用户的追随者比较两者。我正在使用光标检索用户列表。我使用Promissions设置它,第一个get请求将用户的跟随者限制到一个极限,然后查找游标,将数据传递到数组中,然后使用游标的值解析为相同的循环函数,直到游标返回0,当这种情况发生时,我希望以res的形式发送所有内容。当我设置初始承诺并使用
promise.all
来解决它们并附加一个
。然后
,承诺。一切先解决。我尝试从循环函数中解析承诺,然后将另一个承诺返回到第一个函数,但我似乎无法让它工作。有什么想法吗

const express=require(“express”);
const router=express.router();
const twitter=require(“../controllers/twitter”);
设object1={
参数:{
屏幕名称:“xxxx”,
计数:“40”
}
};
让对象={
参数:{
屏幕名称:“xxxxx”,
计数:“40”
}
};
让数据=[];
路由器.get(“,(请求、恢复、下一步)=>{
让one=getUserFollowers(“/1.1/followers/ids.json”,object);
让two=getUserFollowers(“/1.1/followers/ids.json”,object1);
所有([1,2]),然后(console.log);
});
函数getUserFollowers(uri、参数){
啁啾
.get(uri、参数)
。然后(resp=>{
设ids=resp.data.ids;
数据推送(…ID);
返回recurr(resp、uri、参数);
})
。然后(数据=>{
//如果我改为re console.log,我可以获取数据,但我需要将其解析回路由器,以便将其作为res发送。
返回新承诺((解决、拒绝)=>{
解析(数据);
拒绝(错误);
});
});
}
让recurr=(响应、uri、参数)=>{
如果(response.data.next_cursor>0){
params.params.cursor=response.data.next_cursor;
返回getUserFollowers(uri,参数);
}否则{
返回承诺。解析(数据);
}
};

module.exports=路由器代码中的错误:


getUserFollowers
不返回任何内容-因此,让我们在
twitter.get

.then(data => {
//if instead I re console.log the data I can get it, but I need to resolve it back in the router so I can send it as a res. 
  return new Promise((resolve, reject) => {
    resolve(data);
    reject(error);
  });
});
出于几个原因,这毫无意义

  • 你只能“完成”一个承诺一次,所以在“决心”之后加上“拒绝”意味着只执行“决心”
  • .then
    始终返回承诺,因此当.then仅包含同步代码时,通常不需要承诺构造函数;及
  • 你实际上在做的是一个不可操作的。。。您在中收到了
    数据
    。然后,对其不做任何处理,并以一种复杂的方式从另一端返回数据
  • 由于
    recurr
    仅在
    内部调用。因此
    您不需要保证使用
    承诺返回承诺。解决
    -但是,我会完全失去recurr函数,在这样简单的代码中它只会使事情复杂化


    您有一个全局
    data
    变量,该变量包含由
    getUserFollowers
    推送的数据,这一事实可能也会给您带来问题

    重写以修复上述所有问题,您将获得:

    const express = require("express");
    const router = express.Router();
    const twitter = require("../controllers/twitter");
    
    let object1 = {
      params: {
        screen_name: "xxxx",
        count: "40"
      }
    };
    let object = {
      params: {
        screen_name: "xxxxx",
        count: "40"
      }
    };
    
    router.get("", (req, res, next) => {
        let one = getUserFollowers("/1.1/followers/ids.json", object, []);
        let two = getUserFollowers("/1.1/followers/ids.json", object1, []);
        Promise.all([one, two]).then(console.log);
    });
    
    function getUserFollowers(uri, parameters, data) {
        return twitter
        .get(uri, parameters)
        .then(resp => {
            let ids = resp.data.ids;
            data.push(...ids);
            if (resp.data.next_cursor > 0) {
                params.params.cursor = response.data.next_cursor;
                return getUserFollowers(uri, params, data);
            }
            return data;
        });
    }
    
    module.exports = router;
    

    getUserFollowers
    函数不返回任何内容-您的意思是
    return twitter.get。。。。。etc
    返回新承诺((解析,拒绝)=>{解析(数据);拒绝(错误);})-承诺只能“完成”一次。所以那个代码毫无意义。但是,整个
    。那么
    无论如何都可以被删除
    getUserFollowers
    不会
    返回
    它所创建的承诺
    recurr
    只会在
    内部调用。然后
    。。。您可以在您有返回承诺的地方
    返回数据