我有一个函数可以让
- n GET 调用服务器(在 for 循环中),
- 获取 json 响应
- 将响应组装在一起以创建一个 json
并将该 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/