Javascript 如何通过node.js中的API回调异步递归?
API调用返回下一个“页面”的结果。如何优雅地递归该结果回调 下面是一个我需要执行此操作的示例:Javascript 如何通过node.js中的API回调异步递归?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,API调用返回下一个“页面”的结果。如何优雅地递归该结果回调 下面是一个我需要执行此操作的示例: var url = 'https://graph.facebook.com/me/?fields=posts&since=' + moment(postFromDate).format('YYYY-MM-DD') + '&access_token=' + User.accessToken; request.get({ url: url, json: true }, f
var url = 'https://graph.facebook.com/me/?fields=posts&since=' + moment(postFromDate).format('YYYY-MM-DD') + '&access_token=' + User.accessToken;
request.get({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
_.each(body.posts.data, function (post) {
User.posts.push(post); //push some result
});
if (body.pagination.next) { // if set, this is the next URL to query
//?????????
}
} else {
console.log(error);
throw error;
}
});
我建议将调用包装在函数中,并在必要时继续调用它 我还将添加一个回调,以了解进程何时完成
function getFacebookData(url, callback) {
request.get({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
_.each(body.posts.data, function (post) {
User.posts.push(post); //push some result
});
if (body.pagination.next) { // if set, this is the next URL to query
getFacebookData(body.pagination.next, callback);
} else {
callback(); //Call when we are finished
}
} else {
console.log(error);
throw error;
}
});
}
var url = 'https://graph.facebook.com/me/?fields=posts&since=' +
moment(postFromDate).format('YYYY-MM-DD') + '&access_token=' + User.accessToken;
getFacebookData(url, function () {
console.log('We are done');
});
太好了,谢谢。现在很明显。顺便问一句,在这种情况下,我使用函数getFacebookData()和var getFacebookData=function()有什么原因吗?没有硬性原因,只有软性原因——首先,这至少对我来说是一种更自然的函数定义方式,其次,如果你忘记了“var”,那么它将成为一个全局函数。第三点也是最有用的一点——如果以这种方式声明,函数将有一个名称,而不是匿名的。这有它的用途。其中最简单的是——它将显示在堆栈跟踪中。