Javascript 如果在1分钟内未收到响应,如何返回错误(NodeJs)

Javascript 如果在1分钟内未收到响应,如何返回错误(NodeJs),javascript,node.js,error-handling,promise,Javascript,Node.js,Error Handling,Promise,首先要注意的是,我使用的是节点版本6.15 这里我有一个promise方法,它将在调用函数时返回响应 myFunction: (params) = { return innerFunction(params) .then((resp) => { return resp }) .catch((err) => { throw err }) } 这里的挑战是innerFunction有时需要更多的时间才能给出响应,因此如果在1分钟内没有收到响应

首先要注意的是,我使用的是节点版本6.15

这里我有一个promise方法,它将在调用函数时返回响应

myFunction: (params) = {
return innerFunction(params)
    .then((resp) => {
      return resp })
    .catch((err) => { 
       throw err })
}
这里的挑战是innerFunction有时需要更多的时间才能给出响应,因此如果在1分钟内没有收到响应,我需要将此函数作为错误返回


如何实现这一点?

对于一个简单的解决方案,我将使用
bluebird#timeout
方法!(更多关于此)

下面是一个简短的示例,如何使用它:

//导入库
const Bluebird=require('Bluebird'))
//超时需要以毫秒为单位的持续时间参数
常数超时(单位:毫秒=60000;//1分钟
//如果使用本机承诺,则必须首先包装它
//它返回与本机承诺兼容的承诺
Promise.resolve(内部函数(参数)).timeout(超时单位:毫秒)

这只需使用静态方法即可实现。您所要做的就是将
innerFunction()
返回的承诺与解决为错误的预期超时进行竞争

  • 如果
    innerFunction()
    赢得比赛,则将传递其结果/错误
  • 如果指定的超时赢得比赛,则将传递其错误
换句话说,
Promise.race()
对赢得比赛的允诺是透明的,对另一个是不透明的

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);
    }
}

你能不能也显示“innerFunction”函数的代码。