Javascript 我需要在Express中从这些嵌套函数中附加一个列表,但这些项不会存储
我处理的是三个嵌套函数,最后一个并没有返回所需项的列表。如果我从循环内部登录到控制台上最后一个函数的结果,我会看到我想要的URL,但只在函数的循环内部。它不会将它们存储在列表或JSON中。它只返回空列表或空JSONJavascript 我需要在Express中从这些嵌套函数中附加一个列表,但这些项不会存储,javascript,node.js,express,Javascript,Node.js,Express,我处理的是三个嵌套函数,最后一个并没有返回所需项的列表。如果我从循环内部登录到控制台上最后一个函数的结果,我会看到我想要的URL,但只在函数的循环内部。它不会将它们存储在列表或JSON中。它只返回空列表或空JSON 第一个函数只是对URL('/api/getList')的调用,可以正常工作 第二个函数调用Facebook页面上最近的帖子。这将返回post ID,我将它们放入一个列表中 第三个功能是对Facebook的另一个调用,它使用帖子ID从上述帖子中请求照片URL。这将返回并记录URL,但
- 第一个函数只是对URL('/api/getList')的调用,可以正常工作李>
- 第二个函数调用Facebook页面上最近的帖子。这将返回post ID,我将它们放入一个列表中李>
- 第三个功能是对Facebook的另一个调用,它使用帖子ID从上述帖子中请求照片URL。这将返回并记录URL,但我无法将它们存储到任何位置。奇怪的是,当我在最后一个函数中记录'I'时,它返回'25'二十五次。二十五是帖子的数量,返回的图像URL的数量李>
const FB = require('fb')
var image_urls = []
app.get('/api/getList', (req, res1) => {
FB.api('4300000000643', { fields: 'posts' }, function (res2) {
if(!res2 || res2.error) {
console.error(!res2 ? 'error occurred' : res2.error);
return;
}
post_id = res2.posts.data.map(post => post.id)
for (var i = 0; i < post_id.length; i++) {
console.log(i)
FB.api(
"/"+post_id[i]+"/attachments",
function (res3) {
if(!res3 || res3.error) {
console.error(!res3 ? 'error occurred' : res3.error);
return;
}
// this doesn't seem to do anything
image_urls.push(res3.data[0].media.image.src)
// this logs all the URLs I want
// console.log(res3.data[0].media.image.src)
// this logs '25' twenty five times for some reason
console.log(i)
}
);
}
// this returns the array of post ids
console.log(post_id)
// this returns an empty list
console.log(image_urls)
});
});
const FB=require('FB')
var image_url=[]
app.get('/api/getList',(req,res1)=>{
api('4300000000643',{fields:'posts'},函数(res2){
如果(!res2 | | res2.错误){
console.error(!res2?’发生错误:res2.error);
回来
}
post\u id=res2.posts.data.map(post=>post.id)
对于(变量i=0;i
“FB.api”来自
FB.api(“/”+post_id[i]+“/attachments]”,
调用了我从Facebook文档中得到的最后一个函数,它似乎没有给出任何关于它到底是哪种函数的信息。
Facebook节点包没有任何关于如何查询我所看到的个人帖子信息的文档
来自Python,又是Express/Node的新手,这真是令人费解,我有兴趣向您了解这里的情况。您正在处理异步处理,因此您必须跟踪应该得到多少结果,并且只做“需要对所有图像URL做什么”一旦你真正拥有了所有这些:
const globalImageList=[];
app.get(`/api/getList`,(req,res)=>{
api(`4300000000643`,{fields:`posts`},postData=>{
如果(!postData | | postData.error){
console.error(!postData?`error occurrent`:postData.error);
返回res.status(500).write(`server error of some sort`);
}
constprocesslist=postData.posts.data.map(post=>post.id);
设resultCount=0;
processList.forEach(post\u id=>{
FB.api(`/${post_id}/attachments`,imageData=>{
resultCount++;
如果(!imageData | | imageData.error){
返回控制台.error(!imageData?`发生错误':imageData.error);
}
const url=imageData.data[0].media.image.src;
如果(url){
globalImageList.push(url);
}
//我们有我们需要的所有图像吗?
if(resultCount==processList.length){
log(`Image url:`,globalImageList);
发送图像列表(res);
}
});
});
});
});
其中函数sendImageList(res)
执行您需要它执行的任何操作(发送纯文本、json、html、xml等)
还有一点需要考虑:不要浪费时间重新蚀刻相同的数据,因此在点击
FB.api
之前,检查globalImageList
是否已填充。如果已填充,请立即res.write
一个响应(或者使用任何一个api来形成其他代码所依赖的格式良好的响应)然后返回。什么是“我不能将它们存储到任何东西”呢?我用了几种不同的方式来表达它,只是为了弄清楚它(res3.data[0].media.image.src)
返回一个[]
,但是console.log(res3.data[0].media.image.src)
在同一个位置返回我想要记录的25个URL。我说的“任何”都是指我已经尝试过。所以我想知道你是否尝试过。我无法获得它们。我需要将它们带到前端。控制台有各种命名的记录功能,惯例是使用反映日志数据所起作用的功能。如果你有错误,请将它们记录在日志中gconsole.error(…)
如果您有预期的数据,可以使用console.log()
(还有debug
、warn
和info
——根据您的终端仿真器,它们看起来会有所不同,类似于在浏览器中使用时它们的不同)请注意,您的post\u id
是一个数组,因此您可能希望调用该post\u id
。但是,回到最初的问题:您的控制台.log(image\u url)
在异步函数完成之前就消失了,因此它说的是[]
这样做很有道理。在上次调用FB.api附件路由完成之前,它不会被完全填满,所以