解决API端点内的setTimeout问题
我需要给API调用添加延迟,所以我使用setTimeout
。 成功2秒后,我需要返回res.status(200).json(response)
。
exports.someEndpoint = function(req, res) {
return request.post({
url: //etc
})
.then(function(response) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
// is this right?
resolve(
res.status(200).json(response);
);
}, 2000);
});
});
};
我的问题是:我需要在setTimeout
调用resolve
吗? 或者我可以完全忽略它?
您的代码相当于:
exports.someEndpoint = function(req, res) {
return request.post({
url: //etc
})
.then(function(response) {
setTimeout(function() {
res.status(200).json(response);
}, 2000);
});
};
但仅仅是因为它是一个Express路由处理程序,并不希望一般返回任何东西,特别是一个承诺。
另一方面你的代码:
exports.someEndpoint = function(req, res) {
return request.post({
url: //etc
})
.then(function(response) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
// is this right?
resolve(
res.status(200).json(response);
);
}, 2000);
});
});
};
可以称为:
yourModule.someEndpoint(req, res).then(function () {
// code to run after the timeout
});
这在短版本中是不可能的。
我需要在setTimeout内部调用解析吗?
它取决于exports.someEndpoint
会发生什么,但通常是 - 您会希望返回已完成所有异步操作的Promise的Promise。
例如,如果您的快速处理程序被预计承诺的函数捕获,那么在您向用户返回响应之前,流程将继续。
如果你不关心你的请求处理程序中的承诺,那么你也可以不return request.post({
并且不返回任何内容。