2017-04-24 64 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

這做到了。謝謝你的澄清! –