Javascript 如果在1分钟内未收到响应,如何返回错误(NodeJs)
首先要注意的是,我使用的是节点版本6.15 这里我有一个promise方法,它将在调用函数时返回响应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分钟内没有收到响应
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”函数的代码。