通过循环请求服务器调用的行为不一致

时间:2018-08-13 16:30:38

标签: javascript node.js promise

我在目录内设置了一个文件。我遍历每个文件,读取文件内容,向远程服务器发出POST请求,然后获得针对其他任务的每次调用的响应。我面临着获取每个文件响应的不一致行为。让我们命名这些文件

a.txt, 
b.txt
c.txt
d.txt
e.txt

如果我在循环内使用console.log,则可以看到我的循环在进行服务调用之前正确读取了每个文件。问题在于服务呼叫的响应。如果我检查服务调用的响应(我正在进行5个服务调用),那么我会收到一些文件的多个响应,而没有得到某些文件的任何响应。例如:我正在检查每个响应console.log(details.name);,在其中打印每个响应的name属性,该属性应等于相应请求的文件名。有时候我会得到

   a
   a
   a
   b
   e

再来一次

   a
   b
   c
   d
   d

我得到5个响应,但对某些文件(请求)却有多个响应,而对某些请求却没有响应。如果增加文件数量,这是最糟糕的情况,但是如果一次使用一个或两个文件,则会得到预期的输出。我尝试了每个文件,每个请求都分别给出了响应。当我尝试多个文件(请求)时,此行为的原因是什么? 以下是代码

var request = require("request");
var userDetails;

function initialize(content) {

  return new Promise(function(resolve, reject) {
    request.post({
      url: 'http://xxx/yyy',
      form: {
        content: content
      }
    }, function(err, resp, body) {
      if (err) {
        reject(err);
      } else {
        resolve(JSON.parse(body));
      }
    })
  });
};

function main() {
  let filenames = fs.readdirSync(dir);
  filenames.forEach(function(filename) {
    console.log(filename);
    let fileContent = fs.readFileSync(dir + filename, 'utf-8');
    var initializePromise = initialize(fileContent);
    initializePromise.then(function(result) {
      details = result;
      .......
      console.log(details.name);
    }, function(err) {
      console.log(err);
    });
  });
}

main();

0 个答案:

没有答案