量角器中 API 响应后的 JS 变量未定义错误
JS variable undefined error after the API response in protractor
我需要对 API 响应中的响应执行操作。我能够处理响应以获得所需的结果。但是当我试图在该函数之外获取变量时,我得到的变量是未定义的。我需要 return 函数中的变量。
我的代码
RetrieveLatestRunIDFromTestSuiteDetails : async function(Project, TestEnvironment, JenkinsJob, TestExecutionID) {
var testSuiteStatuses ;
var input={
"jenkinsJob": JenkinsJob,
"project": Project,
"testEnvironment": TestEnvironment,
"TestExecutionID":TestExecutionID
};
const data=JSON.stringify(input);
const options= {
host: host,
path: '/api/db/getRunIDFromTestSuiteDetails',
method: 'PUT',
headers: {
'Content-Type': 'application/json'
}
}
const request = await https.request(options, (res) => {
console.log(`statusCode from RetrieveLatestRunIDFromTestSuiteDetails :: ${res.statusCode}`);
res.on('data', (d) => {
process.stdout.write("Response Data from RetrieveLatestRunIDFromTestSuiteDetails:: " + d);
var jsonobj=JSON.parse(d);
testSuiteStatuses=jsonobj["buildID"];
console.log("build id number:"+testSuiteStatuses);
})
})
console.log("test suite number that needs to return:"+testSuiteStatuses);
request.write(data);
request.end();
return testSuiteStatuses;
}
在控制台上我得到
test suite number that needs to return:undefined
statusCode from RetrieveLatestRunIDFromTestSuiteDetails :: 200
Response Data from RetrieveLatestRunIDFromTestSuiteDetails:: {"buildID":48}build id number:48
需要 return 的测试套件编号在任何其他语句之前执行。
有人可以帮我 return 变量“testSuiteStatuses”。
感谢您的帮助。
谢谢
你需要做两件事。首先,将整个函数包装在一个 Promise 中。其次,将您的 return 语句移至 res.on('end', () => {})
并解析其中的值。请注意,我还从您的函数中删除了 async/await 。这里不需要。
RetrieveLatestRunIDFromTestSuiteDetails : function(Project, TestEnvironment, JenkinsJob, TestExecutionID) {
return new Promise((resolve, reject) => {
let testSuiteStatuses;
const input = {
"jenkinsJob": JenkinsJob,
"project": Project,
"testEnvironment": TestEnvironment,
"TestExecutionID":TestExecutionID
};
const data=JSON.stringify(input);
const options= {
host: host,
path: '/api/db/getRunIDFromTestSuiteDetails',
method: 'PUT',
headers: {
'Content-Type': 'application/json'
}
};
const request = https.request(options, (res) => {
console.log(`statusCode from RetrieveLatestRunIDFromTestSuiteDetails :: ${res.statusCode}`);
res.on('data', (d) => {
process.stdout.write("Response Data from RetrieveLatestRunIDFromTestSuiteDetails:: " + d);
var jsonobj=JSON.parse(d);
testSuiteStatuses=jsonobj["buildID"];
console.log("build id number:"+testSuiteStatuses);
});
res.on('end', () => {
console.log("test suite number that needs to return:"+testSuiteStatuses);
resolve(testSuiteStatuses);
});
});
request.write(data);
request.end();
});
}
我需要对 API 响应中的响应执行操作。我能够处理响应以获得所需的结果。但是当我试图在该函数之外获取变量时,我得到的变量是未定义的。我需要 return 函数中的变量。 我的代码
RetrieveLatestRunIDFromTestSuiteDetails : async function(Project, TestEnvironment, JenkinsJob, TestExecutionID) {
var testSuiteStatuses ;
var input={
"jenkinsJob": JenkinsJob,
"project": Project,
"testEnvironment": TestEnvironment,
"TestExecutionID":TestExecutionID
};
const data=JSON.stringify(input);
const options= {
host: host,
path: '/api/db/getRunIDFromTestSuiteDetails',
method: 'PUT',
headers: {
'Content-Type': 'application/json'
}
}
const request = await https.request(options, (res) => {
console.log(`statusCode from RetrieveLatestRunIDFromTestSuiteDetails :: ${res.statusCode}`);
res.on('data', (d) => {
process.stdout.write("Response Data from RetrieveLatestRunIDFromTestSuiteDetails:: " + d);
var jsonobj=JSON.parse(d);
testSuiteStatuses=jsonobj["buildID"];
console.log("build id number:"+testSuiteStatuses);
})
})
console.log("test suite number that needs to return:"+testSuiteStatuses);
request.write(data);
request.end();
return testSuiteStatuses;
}
在控制台上我得到
test suite number that needs to return:undefined
statusCode from RetrieveLatestRunIDFromTestSuiteDetails :: 200
Response Data from RetrieveLatestRunIDFromTestSuiteDetails:: {"buildID":48}build id number:48
需要 return 的测试套件编号在任何其他语句之前执行。 有人可以帮我 return 变量“testSuiteStatuses”。
感谢您的帮助。
谢谢
你需要做两件事。首先,将整个函数包装在一个 Promise 中。其次,将您的 return 语句移至 res.on('end', () => {})
并解析其中的值。请注意,我还从您的函数中删除了 async/await 。这里不需要。
RetrieveLatestRunIDFromTestSuiteDetails : function(Project, TestEnvironment, JenkinsJob, TestExecutionID) {
return new Promise((resolve, reject) => {
let testSuiteStatuses;
const input = {
"jenkinsJob": JenkinsJob,
"project": Project,
"testEnvironment": TestEnvironment,
"TestExecutionID":TestExecutionID
};
const data=JSON.stringify(input);
const options= {
host: host,
path: '/api/db/getRunIDFromTestSuiteDetails',
method: 'PUT',
headers: {
'Content-Type': 'application/json'
}
};
const request = https.request(options, (res) => {
console.log(`statusCode from RetrieveLatestRunIDFromTestSuiteDetails :: ${res.statusCode}`);
res.on('data', (d) => {
process.stdout.write("Response Data from RetrieveLatestRunIDFromTestSuiteDetails:: " + d);
var jsonobj=JSON.parse(d);
testSuiteStatuses=jsonobj["buildID"];
console.log("build id number:"+testSuiteStatuses);
});
res.on('end', () => {
console.log("test suite number that needs to return:"+testSuiteStatuses);
resolve(testSuiteStatuses);
});
});
request.write(data);
request.end();
});
}