Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要在Express中从这些嵌套函数中附加一个列表,但这些项不会存储_Javascript_Node.js_Express - Fatal编程技术网

Javascript 我需要在Express中从这些嵌套函数中附加一个列表,但这些项不会存储

Javascript 我需要在Express中从这些嵌套函数中附加一个列表,但这些项不会存储,javascript,node.js,express,Javascript,Node.js,Express,我处理的是三个嵌套函数,最后一个并没有返回所需项的列表。如果我从循环内部登录到控制台上最后一个函数的结果,我会看到我想要的URL,但只在函数的循环内部。它不会将它们存储在列表或JSON中。它只返回空列表或空JSON 第一个函数只是对URL('/api/getList')的调用,可以正常工作 第二个函数调用Facebook页面上最近的帖子。这将返回post ID,我将它们放入一个列表中 第三个功能是对Facebook的另一个调用,它使用帖子ID从上述帖子中请求照片URL。这将返回并记录URL,但

我处理的是三个嵌套函数,最后一个并没有返回所需项的列表。如果我从循环内部登录到控制台上最后一个函数的结果,我会看到我想要的URL,但只在函数的循环内部。它不会将它们存储在列表或JSON中。它只返回空列表或空JSON

  • 第一个函数只是对URL('/api/getList')的调用,可以正常工作
  • 第二个函数调用Facebook页面上最近的帖子。这将返回post ID,我将它们放入一个列表中
  • 第三个功能是对Facebook的另一个调用,它使用帖子ID从上述帖子中请求照片URL。这将返回并记录URL,但我无法将它们存储到任何位置。奇怪的是,当我在最后一个函数中记录'I'时,它返回'25'二十五次。二十五是帖子的数量,返回的图像URL的数量
第一个函数只调用一次。第二个函数调用一次。第三个函数被调用25次

如果你想知道为什么我有两个for循环应该做同样的事情,那是因为我认为这可能解决了这个问题。我在一个循环中得到了相同的结果

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。我说的“任何”都是指我已经尝试过。所以我想知道你是否尝试过。我无法获得它们。我需要将它们带到前端。控制台有各种命名的记录功能,惯例是使用反映日志数据所起作用的功能。如果你有错误,请将它们记录在日志中g
console.error(…)
如果您有预期的数据,可以使用
console.log()
(还有
debug
warn
info
——根据您的终端仿真器,它们看起来会有所不同,类似于在浏览器中使用时它们的不同)请注意,您的
post\u id
是一个数组,因此您可能希望调用该
post\u id
。但是,回到最初的问题:您的
控制台.log(image\u url)
在异步函数完成之前就消失了,因此它说的是
[]
这样做很有道理。在上次调用FB.api
附件路由完成之前,它不会被完全填满,所以