javascript - nodejs强制同步调用存储json

标签 javascript node.js asynchronous

我有一个函数可以让

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

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

    函数 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();
    }}
    

我必须等待上述函数完成才能存储生成的 json。当我将存储函数作为回调传递时,由于 GET 调用的异步性质,没有任何内容被保存。

如何强制函数完成然后保存生成的 JSON?

非常感谢!

最佳答案

我认为使用 Promise.all() 可以轻松解决您的问题.阅读有关其工作原理的文档,但基本上您会将每个 promise 添加到一个数组中,形成一个 promise 数组,当您在此数组上调用 Promise.all() 时,它将等待所有要完成的异步调用。

关于javascript - nodejs强制同步调用存储json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46065266/

相关文章:

php - 如何在 PHP 中正确分离和删除 2 个进程之间的共享内存?

c# - MongoDB 2.0 驱动程序和非异步代码的潜在死锁

javascript - 每个循环淡入淡出动画中的 jQuery 异步行为

node.js - 如何解决使用服务帐户上传时 Google Drive 存储空间超出的问题

javascript - 如何防止在 EJS 中多次打印?

javascript - 我如何在 Angularjs 中广播一个对象?

javascript - 如何在 JavaScript 中以正确的格式格式化日期

php - 将 javascript 对象映射到 MySQL 数据库中的 ID

javascript - 如何使用JS打印HTML中下拉框中选择的值

javascript - 如何防止 ChildProcess 内存不足? Electron/Node.js