Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 邮递员API-setNextRequest未设置下一个请求_Javascript_Api_If Statement_Variables_Postman - Fatal编程技术网

Javascript 邮递员API-setNextRequest未设置下一个请求

Javascript 邮递员API-setNextRequest未设置下一个请求,javascript,api,if-statement,variables,postman,Javascript,Api,If Statement,Variables,Postman,我有一个获取作业状态的API。 它解析响应主体并查找作业的“状态” 如果它正在进行,我会告诉请求等待10秒,然后重新运行,但这并没有发生,它只是进入下一个 这是我正在运行的测试: pm.environment.unset("JobStatus"); var jsonData = pm.response.json(); pm.environment.set("JobStatus", jsonData['progress-update'].state); const sleep = (millis

我有一个获取作业状态的API。 它解析响应主体并查找作业的“状态”

如果它正在进行,我会告诉请求等待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);
}
数据有一个我正在检查的主要任务,然后是进程字符串中具有相同状态的许多子任务

{
    "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的测试中设置了变量,并在预脚本请求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?

您要做的最好是使用collection runner和
setNextRequest
。我花了好几个小时试图完成你用同样的方式尝试的同样的事情,但一事无成。这是你最好的选择:


不幸的是,这只能在collection runner中工作,但其思想是在单个请求中执行所有
if
语句,并基于逻辑执行
setNextRequest(“相同的请求”)
setNextRequest(null)

使用collection runner和
setNextRequest
可以最好地完成您要做的事情。我花了好几个小时试图完成你用同样的方式尝试的同样的事情,但一事无成。这是你最好的选择:


不幸的是,这只在collection runner中起作用,但其思想是,在单个请求中,您执行所有的
if
语句,并且基于逻辑,您将
setNextRequest(“相同的请求”)
setNextRequest(null)

对于可能遇到此问题的人,我发现了问题,或者更确切地说是两个问题

未设置我的environment.JobStatus变量,因此我无法确定如何使其如此做。所以我放弃了环境变量,只是在JS中声明了它

其次,我的postman.setNextRequest(“获取作业状态”)被忽略,因为它嵌套在sleep函数中。不知道为什么会这样,但我把它从睡梦中放了下来,现在它完全好了

var jsonData = pm.response.json();
var jobState = jsonData['progress-update'].state

const sleep = (milliseconds) => {
  return new Promise(resolve => setTimeout(resolve, milliseconds));
};


if (    jobState === "DONE") 
{
  console.log(jobState);
}
else if (    jobState === "INPROGRESS")
{
  sleep(10000).then(() => {
  console.log(jobState);
})
    postman.setNextRequest("Get Job Status");
}
else {
  console.log("ELSE Clause was matched.");
  console.log(jobState);
  postman.setNextRequest(null);
}

对于那些可能遇到这种情况的人,我发现了一个问题,或者说是两个问题

未设置我的environment.JobStatus变量,我无法确定如何使其这样做。所以我放弃了环境变量,只是在JS中声明了它

其次,我的postman.setNextRequest(“获取作业状态”)被忽略,因为它嵌套在sleep函数中。不知道为什么会这样,但我把它从睡梦中放了下来,现在它完全好了

var jsonData = pm.response.json();
var jobState = jsonData['progress-update'].state

const sleep = (milliseconds) => {
  return new Promise(resolve => setTimeout(resolve, milliseconds));
};


if (    jobState === "DONE") 
{
  console.log(jobState);
}
else if (    jobState === "INPROGRESS")
{
  sleep(10000).then(() => {
  console.log(jobState);
})
    postman.setNextRequest("Get Job Status");
}
else {
  console.log("ELSE Clause was matched.");
  console.log(jobState);
  postman.setNextRequest(null);
}

这正是我正在做的,我的代码已经包含了这些命令,并且正在从collection runner中使用它们。我只是不明白为什么我的逻辑不起作用。JobStatus=INPROGRESS,因此它应该等待10秒,然后再次检查JobStatus,直到完成或其他操作。相反,它只是继续进行下一项工作,就好像它“完成”了一样。我以前在
睡眠方面遇到过问题,但我想不起它周围的问题,我相信这与异步调用有关。在任何情况下,最终对我起作用的是使用Postman的“sleep”端点:“这正是我正在做的,我的代码已经包含了这些命令,并且正在从collection runner中使用它们。我只是不明白为什么我的逻辑不起作用。JobStatus=INPROGRESS,因此它应该等待10秒,然后再次检查JobStatus,直到完成或其他操作。相反,它只是继续进行下一项工作,就好像它“完成”了一样。我以前在
睡眠方面遇到过问题,但我想不起它周围的问题,我相信这与异步调用有关。无论如何,最终对我起作用的是使用邮递员的“睡眠”终点:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。