2017-04-24 99 views
1

我无法访问rss订阅源的异步请求的结果。我提到的帖子,How do I return the response from an asynchronous call?,这表明使用承诺。我实现了一个Promise,它解决了请求函数外的请求结果,但仍然无法访问。故障设置异步请求结果

我试图设置变量film到请求结果,但似乎只能得到undefined

var request = require("request"); 
var parseString = require("xml2js").parseString; 

var url = 'http://feeds.frogpants.com/filmsack_feed.xml'; 

var film; 

request(url, function(error, response, body) { 
    return new Promise(function(resolve, reject) { 
     if (error) { 
      console.log(error); 
     } 
     else { 
      if (response.statusCode === 200) { 
       parseString(body, function(err, result) { 
        var feed = result.rss.channel[0].item.reduce(function(acc, item) { 
         acc.push(item); 
         return acc; 
        }, []) 
        resolve(feed) 
       }) 
      } 
     } 
    }) 
    .then(function(data) { 
     film = data; 
    }) 
}) 

console.log(film) 

从请求函数中记录feed返回我正在查找的结果。我错过了什么?谢谢。

回答

0

我不是很有经验,但我认为问题是console.log是在请求(异步)返回结果之前执行的。 也许你应该尝试从最后返回“电影”,那么()和链另一则(),以CONSOLE.LOG该变种

...  
    .then(function(data) { 
     return film = data; 
    }) 
    .then((result) => console.log(result)) 
}) 
+0

这做到了。谢谢你的澄清! –