2017-08-10 85 views
0

我試圖使用Graph API使用Node.js從組中刪除一些用戶。數組users包含約600個條目。我從Facebook獲得了約100個結果。其餘的結果是undefinedNode.js setImmediate在for循環中

我使用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

setImmidiate在這裏沒有幫助,因爲響應將在當前循環結束後到達。

您需要異步處理。讓你想成功是什麼Simpliest方法是使用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); 
 
});

請注意,我的答案我給的解決方案,用於校正異步流,我也沒檢查特定的API調用與您的代碼段中提供的要求相符

+0

非常感謝! 'async.map'的作品非常漂亮。 – wannik