【发布时间】:2021-04-14 16:44:56
【问题描述】:
在 Node.js 中,我使用 Promise.race 来超时并取消 Request-Promise 库发出的请求。我的Promise.race 实现似乎阻止了该程序。
Promise.race 确实解析并返回,但之后,程序永远不会退出。
再次强调,等待确实完成并记录响应,但程序永远不会退出。
const rp = require('request-promise');
/**
* @param {rp.RequestPromise} request
* @param {Number} ms
* @returns {Error}
*/
const delay = (request, ms) => new Promise((resolve, reject) => setTimeout(() => {
request.cancel();
return reject(new Error("Timeout"))
}, ms))
async function main() {
try {
const options = {
method: 'GET',
url: "https://api.ipify.org/?format=json",
};
const request = rp(options);
const response = await Promise.race([request, delay(request, 500000)]);
console.log(response)
} catch (e) {
console.log(e)
}
}
main()
有人知道这是什么原因吗?
【问题讨论】:
-
@FZs 这里的重点是等待完成但程序永远不会退出。它甚至记录响应。我知道 await 做什么。
-
问题不清楚。从不退出?我什至没有看到
main被调用。我认为你被投票是因为Promise.race并不为人所知。谢谢你。 -
@StackSlave 我忘记复制那行,编辑问题以反映 main 被调用。
-
@StackSlave 主函数永远不会退出。我看到响应被记录下来。我认为
setTimeout阻止了函数退出。 -
Promise.race只返回第一个Promise已解决或被拒绝。我没有看到任何说明其他Promise无法解决的文档,所以我认为request.cancel()正在发生,无论哪种方式。
标签: javascript node.js