javascript - 如果需要超过一定时间,节点 js 暂停执行语句
问题描述
如果需要超过一定时间,我想暂停执行语句。请帮助我实现这一目标?
在下面给出的示例代码片段中,如果语句const result = await curly.get('www.google.com');
需要超过 2 秒的时间才能完成执行,我想暂停语句的执行并抛出异常。
const { curly } = require('node-libcurl');
exports.curlFetch = async () => {
try {
const result = await curly.get('www.google.com');
return result;
} catch (err) {
console.error('----------ERRORR OCCURRED----------', err);
throw err;
}
}
解决方案
您可以使用Promise.race()
我定义了一个timeout
函数,它返回一个在一定时间后拒绝的承诺。如果请求更快,则结果将在 3 秒内得到解决,否则超时将被拒绝,您将进入catch
区块
const { curly } = require('node-libcurl');
exports.curlFetch = async () => {
try {
const request = curly.get('www.google.com');
const result = await Promise.race([request, timeout(3000)])
return result;
} catch (err) {
console.error('----------ERRORR OCCURRED----------', err);
throw err;
}
}
function timeout(ms) {
return new Promise((res, rej) => setTimeout(rej("Request took too long"), ms));
}
推荐阅读
- node.js - 在 Linux(Ubuntu)的 Windows 子系统中运行的 Node.js 应用程序不会从 .env 文件加载值
- reactjs - mapDispatchToProps 在按钮单击时不起作用 - React Native
- python - 如何在基于 id 的 HTML jinja 模板中评估此条件
- javascript - 如何在我的自定义滑块 JavaScript 代码中插入自动播放选项
- javascript - 反应:什么都没有返回,而三元总是返回一些东西
- php - 带有原始 SQL 语句的 Laravel 查询构建器返回语法错误
- flutter - 如何在 Flutter 中画一条带尖三角形的线?
- xml - 从 XSL 元素标记中检索值
- typo3 - 如何发布与所有类别标题相关的记录
- rest - 通过公开的 API 为 Actions on Google 动态创建技能?