首页 > 解决方案 > 如果需要超过一定时间,节点 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;
  }
}

标签: javascriptnode.jsexpress

解决方案


您可以使用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));
}


推荐阅读