在for循环

时间:2017-08-10 17:31:45

标签: node.js facebook-graph-api

我尝试使用Node.js使用Graph API从组中删除一些用户。数组users包含大约600个条目。我从Facebook得到了大约100个结果。剩下的结果是undefined

我使用setImmediate对请求进行排队。

users = [1234234, 153223, ...];

var request = require('request');

const ACCESS_TOKEN = 'DQVJ0UT...';

var graphapi = request.defaults({
  baseUrl: 'https://graph.facebook.com',
  json: true,
  auth: {
    'bearer' : ACCESS_TOKEN
  }
});

function del(uid) {
  graphapi({
    url: '6803161/members',
    method: 'DELETE',
    qs: {
      member: uid
    }
  }, function(error,res,body) {
    console.log(body)
  });
}

for (var i = 0; i < users.length; i++) {
  setImmediate(del, users[i]);
}

1 个答案:

答案 0 :(得分:1)

setImmidiate在这里没有帮助,因为响应将在当前循环结束后到达。

您需要异步处理。成功实现目标的最简单方法是使用async库:

&#13;
&#13;
const users = [1234234, 153223, ...];

const request = require('request');
const async = require('async');

const ACCESS_TOKEN = 'DQVJ0UT...';

var graphapi = request.defaults({
  baseUrl: 'https://graph.facebook.com',
  json: true,
  auth: {
    'bearer' : ACCESS_TOKEN
  }
});

function del(uid, cb) {
  graphapi({
    url: '6803161/members',
    method: 'DELETE',
    qs: {
      member: uid
    }
  }, function(error,res,body) {
    cb(error, body);
  });
}

async.map( users, del, (err, results) => {
   if (error) console.error(error);
   console.log(results);
});
&#13;
&#13;
&#13;

请注意,在我的回答中,我提供了纠正异步流量的解决方案,并且我没有检查特定的API调用是否符合您的代码段中提供的请求