![](/img/trans.png)
[英]Create Issue in github through api using nodejs and request: response is undefined
[英]Nodejs issue with writing request url, response to file synchronously after get api request
我在StackOverflow帖子中搜索了很多内容,并能够找出达到此级别的程序,但是,我无法继续前进。 如果您可以提出建议,则需要您的建议。
我正在运行一个get API,方法是依次使用URL数组接收2个请求URL,然后使用for循环处理每个URL并将其发送到request.get并能够在控制台中查看响应。
但是,问题出在我尝试使用测试用例名称数组中的测试用例名称将请求URL及其对应的响应写入文件时。
它仅使用TC2_reqres.json写入文件,并放置第一次调用的请求响应。
期待这样的事情
TC1_reqres.json包含/ people / 1响应TC2_reqres.json包含/ people / 2响应
请提出建议。
谢谢! 提前给你们所有人。
var request = require("request");
var fs = require('fs');
describe('testsuite', function () {
it("test case", function (done) {
var urlarr = ["https://swapi.co/api/people/1", "https://swapi.co/api/people/2"];
var tcnamearr = ["TC1", "TC2"];
var respath = "C:/Study_JSR/capi/tests/Res/";
for (var i = 0; i < tcnamearr.length; i++) {
url = urlarr[i];
tcname = tcnamearr[i];
request.get({ url: url, "rejectUnauthorized": false, "json": true }, function (e, r, user) {
resbod = JSON.stringify(user);
console.log("resbod: " + resbod);
fs.writeFileSync(respath + tcname + "_reqres.json", resbod);
})
}
done();
});
});
Javascript具有闭包和异步调用的奇怪行为。 for
循环在调用回调之前完成,因此tcname
的值始终为“ TC2”。 您应该尝试重构代码。 使用axios
代替request
。 它支持承诺,并且在这些情况下更好。
一种可能的解决方案是:
var request = require("axios");
var fs = require('fs');
describe('testsuite', function () {
it("test case", function (done) {
var respath = "C:/Study_JSR/capi/tests/Res/";
var gets = [
request.get({ url: "https://swapi.co/api/people/1", "rejectUnauthorized": false, "json": true }),
request.get({ url: "https://swapi.co/api/people/2", "rejectUnauthorized": false, "json": true })
]
Promise.all(gets).then(function(res) {
fs.writeFileSync(respath + "TC1" + "_reqres.json", res[0].body)
fs.writeFileSync(respath + "TC2" + "_reqres.json", res[1].body)
})
done();
});
});
这只是一个起点,您可以根据需要删除重复项。
尝试,而不是var
使用let
for (let i = 0; i < tcnamearr.length; i++) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.