nodejs强制同步调用以存储json

时间:2017-09-06 00:57:00

标签: javascript node.js asynchronous

我有一个制作

的功能
  1. n GET调用服务器(在for循环中),
  2. 获取json回复
  3. 将响应组合在一起以创建一个json
  4. 并将json存储在MongoDB中

    我想等待所有响应完成,合并响应,然后存储产生的一个json。以下是代码

    function getBucketStoreJson(服务器,用户名,密码){

    var tmp_json = {};
    for (var j = 0; j < servers.length; j++){
        var server = servers[j];
        var options = {
          'host':  server.toString(),
          'port': port,
          'path': somepath,
          'method': 'GET',
          'auth':username.toString()+':'+password.toString()            
        };
    //logger.debug("options : " + JSON.stringify(options));
      var request = http.request(options,function(res){
        var fullBucketJson = "";            
        logger.info('STATUS: ' + res.statusCode);
        logger.info('HEADERS: ' + JSON.stringify(res.headers));
        res.setEncoding('utf8');
        res.on('data',function(chunk){
            fullBucketJson += chunk;
        });
        res.on('end',function(){
           <more code that assembles the jsons together>
        });
    });     
    //res.end();    
    request.on('error',(e) => {
    
     });
     request.end();
    }}
    
  5. 我必须等待上面的函数完成才能存储生成的json。当我将存储函数作为回调传递时,由于GET调用的异步性质,所以不会保存任何内容。

    如何强制完成该功能,然后保存生成的JSON?

    非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为使用Promise.all()可以轻松解决您的问题。阅读文档,了解它是如何工作的,但基本上你将每个promise添加到一个数组中,制作一个promises数组,当你在这个数组上调用Promise.all()时,它将等待所有异步调用完成。