如何在承诺中添加超时?
How to add a timeout in a promise?
我读过许多在承诺中添加超时的不同方法,但大多数(如果不是全部)似乎都使用 setTimeout()
方法。根据定义:
The setTimeout() method calls a function or evaluates an expression after a specified number of milliseconds.
我正在寻找的是一种表达方式:
"If the function executed inside the promise (that will either resolve or
reject the promise), does not complete within a specified x number of
milliseconds, automatically reject or raise an exception."
如果和上面定义的一样(使用setTimeout()
方法),不胜感激!
您可以将 setTimeout
包装在一个 Promise 中并创建一个小的“等待”函数,然后您可以将其与 Promise.race
:
一起使用
function wait(ms) {
return new Promise((_, reject) => {
setTimeout(() => reject(new Error('timeout succeeded')), ms);
});
}
try {
const result = await Promise.race([wait(1000), yourAsyncFunction()]);
} catch(err) {
console.log(err);
}
使用此代码,如果 yourAsyncFunction
花费超过 1000 ms
到 resolve/reject,Promise.race
将拒绝,否则 result
将从 yourAsyncFunction
.
我读过许多在承诺中添加超时的不同方法,但大多数(如果不是全部)似乎都使用 setTimeout()
方法。根据定义:
The setTimeout() method calls a function or evaluates an expression after a specified number of milliseconds.
我正在寻找的是一种表达方式:
"If the function executed inside the promise (that will either resolve or
reject the promise), does not complete within a specified x number of
milliseconds, automatically reject or raise an exception."
如果和上面定义的一样(使用setTimeout()
方法),不胜感激!
您可以将 setTimeout
包装在一个 Promise 中并创建一个小的“等待”函数,然后您可以将其与 Promise.race
:
function wait(ms) {
return new Promise((_, reject) => {
setTimeout(() => reject(new Error('timeout succeeded')), ms);
});
}
try {
const result = await Promise.race([wait(1000), yourAsyncFunction()]);
} catch(err) {
console.log(err);
}
使用此代码,如果 yourAsyncFunction
花费超过 1000 ms
到 resolve/reject,Promise.race
将拒绝,否则 result
将从 yourAsyncFunction
.