我尝试使用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]);
}
答案 0 :(得分:1)
setImmidiate
在这里没有帮助,因为响应将在当前循环结束后到达。
您需要异步处理。成功实现目标的最简单方法是使用async
库:
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;
请注意,在我的回答中,我提供了纠正异步流量的解决方案,并且我没有检查特定的API调用是否符合您的代码段中提供的请求