【发布时间】:2020-12-28 01:06:43
【问题描述】:
我有一个客户端定期发送 GET 请求以获取早前生成的需求状态。
如果需求已准备就绪,服务器将响应客户端请求的信息,并应在 X 分钟后安排 Axios POST 请求。
现在,我尝试使用 Promises 和 setTimeout,但它们似乎不起作用。我想知道我使用的 res.json 是否会导致一些问题。
api.get('/api-gitlab-launcher/request-status', async (gitlabRequest, res, next) => {
requestNb = gitlabRequest.headers['request-nb']
let obj = getRequestInfo(gitlabRequest, requestNb)
if (obj.requestStatus === "Not found") {
res.status(404)
res.send("RequestNb doesn't exist!")
} else if (obj.requestStatus === "Running") {
res.status(400)
res.send("Not finished yet")
} else if (obj.requestStatus === "finished") {
// This code will be scheduled to run after EXPIRATION_TIME
setTimeout(async () => {
let data = new FormData();
data.append("token", DESTROY_TOKEN);
data.append("ref", "terraform-v1");
data.append("variables[LAST_PIPELINE_ID]", pipelineId);
config = {
method: "POST",
url: `https://gitlab.com/api/v4/projects/${PROJECT_ID_DESTROY}/trigger/pipeline`,
data: data,
headers: {
...data.getHeaders(),
},
};
console.log('About to launch POST request')
await axios(config).then(
() => {
console.log("Resources destroyed.");
},
(error) => {
console.log(`error : ${error}`);
}
);
}, EXPIRATION_TIME);
res.status(200);
res.json({ec2Link: obj.ec2InstanceLink});
}
}
)
我做得对吗?做错什么了吗?我愿意接受所有批评。
编辑:Axios POST 请求无需 setTimeout() 包装即可工作:
START RequestId: 03ee88f5-4abc-4f63-a59c-faa877c4b9f4 Version: $LATEST
END RequestId: 03ee88f5-4abc-4f63-a59c-faa877c4b9f4
REPORT RequestId: 03ee88f5-4abc-4f63-a59c-faa877c4b9f4 Duration: 1396.87 ms Billed Duration: 1400 ms Memory Size: 128 MB Max Memory Used: 91 MB Init Duration: 585.65 ms
START RequestId: 9ffcbec2-6445-422c-87b7-4a5164b0593b Version: $LATEST
END RequestId: 9ffcbec2-6445-422c-87b7-4a5164b0593b
REPORT RequestId: 9ffcbec2-6445-422c-87b7-4a5164b0593b Duration: 5.03 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 91 MB
START RequestId: 3577932d-53ec-4ee0-bf4a-f8aee12eba67 Version: $LATEST
END RequestId: 3577932d-53ec-4ee0-bf4a-f8aee12eba67
REPORT RequestId: 3577932d-53ec-4ee0-bf4a-f8aee12eba67 Duration: 1.60 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 91 MB
START RequestId: ab854edb-5a86-41b1-81de-8bec85a54ad2 Version: $LATEST
END RequestId: ab854edb-5a86-41b1-81de-8bec85a54ad2
REPORT RequestId: ab854edb-5a86-41b1-81de-8bec85a54ad2 Duration: 210.82 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 92 MB
START RequestId: 5f6ae638-ea84-4308-8ea5-6ae3d3fb0116 Version: $LATEST
END RequestId: 5f6ae638-ea84-4308-8ea5-6ae3d3fb0116
REPORT RequestId: 5f6ae638-ea84-4308-8ea5-6ae3d3fb0116 Duration: 516.74 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 93 MB
START RequestId: ddeb01ae-c9f6-40b2-ace5-b8b47ed21ebe Version: $LATEST
2020-09-09T20:15:53.893Z ddeb01ae-c9f6-40b2-ace5-b8b47ed21ebe INFO About to launch POST request
2020-09-09T20:15:54.644Z ddeb01ae-c9f6-40b2-ace5-b8b47ed21ebe INFO Resources destroyed.
END RequestId: ddeb01ae-c9f6-40b2-ace5-b8b47ed21ebe
REPORT RequestId: ddeb01ae-c9f6-40b2-ace5-b8b47ed21ebe Duration: 753.89 ms Billed Duration: 800 ms Memory Size: 128 MB Max Memory Used: 93 MB
【问题讨论】:
-
请说明您要在请求处理程序中间使用超时来实现什么?
-
@AlexanderAlexandrov,对不起,我复制了错误的代码版本。我正在尝试用特定时间安排发布请求,
EXPIRATION_TIME
标签: node.js promise async-await axios