node.js - 安排一个 Axios POST 请求
问题描述
我有一个客户端定期发送 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
解决方案
else if
按如下方式更改块,
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(),
},
};
await axios(config).then(
() => {
console.log("Resources destroyed.");
},
(error) => {
console.log(`error : ${error}`);
}
);
}, EXPIRATION_TIME);
res.status(200);
res.json({ ec2Link: obj.ec2InstanceLink });
}
}
请注意,EXPIRATION_TIME
以毫秒为单位。
推荐阅读
- javascript - 创建论坛的正确用户 ID (onetoMany-Mongoose)
- react-hook-form - react-hook-form 和 react-datetime:如何从按钮将时间设置为 moment()
- integration - 为什么 sympy 在整合部分功率时给出不同/错误的答案?
- react-native - 如何通过自定义身份提供程序正确调用和实现 ConnectyCube 的外部身份验证
- flutter - 在实现提供者时创建模型的“扩展”和“与”有什么区别?
- python-3.x - python中类型和对象的实例关系?
- git - 强制推送 Git 子树
- python - 如何打印数字列表但在 IDLE 中像金字塔方式一样计数
- c - C中输入和输出的缓冲区是否不同?
- python - 将一行的值与 Pandas 中的多个值进行比较?