【发布时间】:2019-11-21 14:36:56
【问题描述】:
我有一个获取作业状态的 API。 它解析响应正文并查找作业的“状态:”。
如果它是 INPROGRESS 我告诉请求等待 10 秒并重新运行,但这不会发生,它只是继续下一个。
这是我正在运行的测试:
pm.environment.unset("JobStatus");
var jsonData = pm.response.json();
pm.environment.set("JobStatus", jsonData['progress-update'].state);
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds));
};
pm.environment.get("JobStatus");
if ( environment.JobStatus == "DONE")
{
postman.setNextRequest("Export Results");
}
else if ( environment.JobStatus == "INPROGRESS")
{
sleep(10000).then(() => {
postman.setNextRequest("Get Job Status");
})}
else {
postman.setNextRequest(null);
}
数据有一个我正在检查的主任务,然后是许多具有相同状态 INPROGRESS 字符串的子任务。
{
"progress-update": {
"@type": "parallel-progress",
"job": {
"@href": "/api/space/job-management/jobs/4755716"
},
"taskId": 4755716,
"jobName": "Compare Config-4755716",
"state": "INPROGRESS",
"status": "UNDETERMINED",
"percentage": 10,
"subTask": [
{
"@type": "percentage-complete",
"state": "INPROGRESS",
"status": "UNDETERMINED",
"percentage": 0
},
变量设置正确,但没有遵循我的 else if 语句。
编辑:
我更改了逻辑以在请求 4 的测试中设置变量,并对 Pre-Script Request 5 进行检查。 这应该将收集运行器发送回请求 4,直到 JobStatus == "DONE" 但事实并非如此。
我添加了一些额外的代码来帮助我从控制台查看它的执行情况:
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds));
};
pm.environment.get("JobStatus");
if ( environment.JobStatus === "DONE")
{
postman.setNextRequest("Export Results");
console.log("DONE")
console.log(environment.JobStatus)
}
else if ( environment.JobStatus === "INPROGRESS")
{
sleep(10000).then(() => {
postman.setNextRequest("Get Job Status");
console.log("INPROGRESS")
console.log(environment.JobStatus)
})}
else {
postman.setNextRequest(null);
console.log("ELSE")
console.log(environment.JobStatus)
}
当这个被执行时,我得到了
INPROGRESS
INPROGRESS
在控制台中打印。它只是完成了请求,而没有将自己发送回请求 4 重试。
为什么遵循 else if 逻辑却忽略了 setNextRequest?
【问题讨论】:
-
................
标签: javascript api if-statement variables postman