我在目录内设置了一个文件。我遍历每个文件,读取文件内容,向远程服务器发出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();