2017-06-12 85 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