javascript - 如果1分钟内未收到响应(NodeJ),如何返回错误

标签 javascript node.js error-handling promise

首先要注意的是,我正在使用6.15的节点版本。
在这里,我有一个promise方法,该方法将在调用函数时返回响应。

myFunction: (params) = {
return innerFunction(params)
    .then((resp) => {
      return resp })
    .catch((err) => { 
       throw err })
}
这里的挑战是 innerFunction 有时会花更多时间来做出响应,因此如果我在1分钟内未收到响应,则需要将此函数作为错误返回
我该如何实现?

最佳答案

这可以通过静态方法 Promise.race() 轻松实现。您所要做的就是将innerFunction()返回的promise与解决错误的 promise 超时进行比较。

  • 如果innerFunction()赢得比赛,那么其结果/错误将被传递。
  • 如果 promise 的超时赢得比赛,则其错误将被传递。

  • 换句话说,Promise.race()对任何一个赢得比赛的 promise 都是透明的,而对另一个 promise 则是不透明的。
    myFunction: (params) = {
        let timeoutPromise = new Promise((_, reject) => {
            setTimeout(reject, 60000, new Error('timed out'));
        });
        return Promise.race([timeoutPromise, innerFunction(params)]); // race two promises against each other.
    }
    
    为了提高灵活性,您可以选择将超时持续时间传递给函数,并允许零值表示没有超时。
    myFunction: (params, timeoutDuration = 0) = {
        if(timeoutDuration > 0) {
            let timeoutPromise = new Promise((_, reject) => {
                setTimeout(reject, timeoutDuration, new Error('timed out'));
            });
            return Promise.race([timeoutPromise, innerFunction(params)]); // race two promises against each other.
        } else {
            return innerFunction(params);
        }
    }
    

    关于javascript - 如果1分钟内未收到响应(NodeJ),如何返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64873179/

    相关文章:

    javascript - 我在 list 中设置了地理定位权限,但每个页面仍然要求共享位置

    javascript - 如何删除数组中的重复数组?

    javascript - 新表单 - 嵌入表单集合 - Symfony2

    javascript - 检查页面加载是否使用 Response.Redirect 重定向页面

    javascript - 当尝试通过node.js使用方法函数时,未定义不是一个函数

    函数指针的 Javascript module.export 结构

    c++ - C++中的cin.fail()和!cin有什么区别?

    node.js - Node.js 中调用错误名称的函数的错误处理

    当使用 server.on 检测到 post 请求时,Node.js 返回无法读取属性禁用未定义

    python - 如何通过BucketType定义命令错误消息