Node.js 如何如果在1分钟内未收到响应即返回错误
在Node.js中,有时由于某些错误,响应所需时间比通常多,这种情况下,我们可以返回一个错误或者一些消息,如果在1分钟内未收到响应,而不是等待不确定的时间。
问题: 假设有一个函数 ‘helloGeeks’ 它返回一个promise,然后使用关键词 ‘then’ 来记录返回值。函数 ‘helloGeeks’ 花费的时间太长,导致执行流程停止。
let helloGeeks = new Promise((resolve, reject) => {
setTimeout(resolve, 120000, 'Hello Geeks!')
})
helloGeeks.then((value) => {
console.log(value)
})
输出:
方法1: 让我们创建一个函数 ‘defaultResponse’ 它返回一个promise作为响应。我们希望执行这个函数,而不是比平时更耗时的函数。在这个情况下,我们希望执行的函数是 ‘helloGeeks’ 函数,它需要超过1分钟才能返回响应。
let defaultResponse = new Promise((resolve, reject) => {
setTimeout(resolve, 60000, 'Response timeout!');
})
现在,我们需要使用 Promise.race 方法来竞争promise,这个方法将不同的promise作为参数,并执行花费时间较短的那个,所以我们传入 ‘helloGeeks’ 和 ‘defaultResponse’ ,如果‘helloGeeks’花费时间少于1分钟,它就会被执行,否则会执行 ‘defaultResponse’ ,因为它只花费1分钟。
Promise.race([helloGeeks, defaultResponse]).then((value) => {
console.log(value);
});
示例: 这是使用上述方法来解决问题的完整运行代码。
let helloGeeks = new Promise((resolve, reject) => {
setTimeout(resolve, 120000, 'Hello Geeks!')
})
let defaultResponse = new Promise((resolve, reject) => {
setTimeout(resolve, 60000, 'Response timeout!');
})
Promise.race([helloGeeks, defaultResponse]).then((value) => {
console.log(value);
});
输出:
let defaultResponse = () => {
setTimeout(() => {
console.log('Response timeout!');
process.exit();
}, 2000);
}
let helloGeeks = () => {
setTimeout(() => {
console.log('Hello Geeks!');
}, 6000);
}
defaultResponse();
helloGeeks();
输出: