2017-06-12 86 views
0

我試圖在我的一個路由器中實現異步和請求到異步API請求動作。終點只是一個查詢字符串,我試圖返回一個數組或對象與所有調用的結果。到目前爲止,只有兩個:與異步和請求包(NodeJS/Express)的多個API調用

router.get('/', function(req, res) { 
    async.parallel([ 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsPAM = JSON.parse(body); 
       }; 
       console.log(error); 
      }); 
     }, 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsAll = JSON.parse(body); 
       }; 
       console.log(error); 
      }); 
     }], 
     function(err, results) { 
      res.render("api-results", [results]); 
     }); 
    }); 

這是我正試圖做的。如果我console.log每個變量的結果後請求它正常工作,但沒有被返回,我的ejs模板沒有被服務。

我也用喜歡的東西下面的各種格式(陣列/對象的形式),但我似乎無法得到它的工作的嘗試:

res.render("api-results", { unsPAM: unsPAM, unsAll: unsAll }); 

我認爲它是因爲請求的結果是不以某種方式使它成爲異步數組。任何意見/最佳實踐解決方案/想法的改變將不勝感激。

謝謝。

回答

2

RTFM的另一種情況。在每一個功能,你需要用error對象(或null),你想傳遞的價值來調用next()

router.get('/', function(req, res) { 
    async.parallel([ 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsPAM = JSON.parse(body); 

        return next(null, unsPAM); 
       }; 
       console.log(error); 

       next(error); 
      }); 
     }, 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsAll = JSON.parse(body); 

        return next(null, unsAll); 
       }; 
       console.log(error); 

       next(error); 
      }); 
     }], 
     function(err, results) { 
      res.render("api-results", [results]); 
     }); 
    }); 

,將讓你含[unsPAM, unsAll]的數組。如果你想要一個物體,使用:

res.render("api-results", { unsPAM: results[0], unsAll: results[1]}); 
+0

謝謝你太多了!這很好。請問RTFM究竟是什麼意思?一個快速的谷歌搜索並沒有真正在你使用它的上下文中回答我的問題。非常感謝。接受的答案。 – Lukon

+0

[RTFM](https://en.wikipedia.org/wiki/RTFM)。它的意思是開玩笑。 –

+1

啊哈。真的夠了。無論如何,我很感激你的幫助,我很抱歉在文檔中錯過了這一點。再次感謝。 – Lukon