首先要注意的是,我正在使用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.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/