2016-07-03 63 views
1

我試圖讓它可以將我的趨勢變量從它的函數傳遞到我的帕格模板的渲染器中,而我似乎無法做到這一點。你可以看到,我試圖將「ustrends」和「uktrends」變量傳遞給渲染器。任何幫助表示讚賞。Node.js變量在函數外部的使用

+0

究竟是什麼造成了麻煩?在渲染的輸出中,「ustrends」和「uktrends」是空的還是空的,或者其他你沒有想到的東西? – kevin628

+0

如果問題是變量作用域,請先嚐試: router.get('/',auth.connect(basic),function(req,res,next){result} resultObj; resultObj.ustrends = ustrends; resultObj .uktrends = uktrends; res.json(resultObj); }); 當您請求/ url時,您是否看到空對象? – SamiX

回答

1

請記住,hotTrendswill return a promise,因爲它是從谷歌的API獲得結果。由於渲染器不在回調中,其中ustrendsuktrends被設置爲值,因此不能保證這些值將在渲染器被調用之前設置。

你可以使用幾個嵌套的回調函數,但是這會導致一些代碼被推到很遠的地方;我推薦使用async函數庫,它有一個函數series,它允許你傳遞1)要按順序執行的函數數組,以及2)函數完成後執行的回調函數,如果出現錯誤一個和作爲參數的函數的結果。在下面的代碼片段中,趨勢API返回調用渲染器之前的結果:

async.series([ 
    function(cb) { 
     googleTrends.hotTrends('US').then(function(trends){                             
      ustrends = trends; 
      cb(); 
     }) 
    }, 
    function(cb) { 
     googleTrends.hotTrends('EU').then(function(trends1) {                            
      uktrends = trends1; 
      cb();                                    
     }); 
    } 
], function(err, results) { 
    /* handle errors, do rendering stuff */ 
})