承诺一个带有超时的函数调用
我已经看到许多资源提供了类似的示例,Promise.race
用于在给定的时间段内使函数调用超时。这是一个很好的例子,说明如何Promise.race
在实践中使用。这是一些示例代码:
function doWithinInterval(func, timeout) {
var promiseTimeout = new Promise(function (fulfill, reject) {
// Rejects as soon as the timeout kicks in
setTimeout(reject, timeout);
});
var promiseFunc = new Promise(function (fulfill, reject) {
var result = func(); // Function that may take long to finish
// Fulfills when the given function finishes
fulfill(result);
});
return Promise.race([promiseTimeout, promiseFunc]);
}
上面使用的简单方法Promise.race
在超时之前func
完成后立即拒绝承诺。否则,一旦func
函数在超时间隔之前完成,项目就会完成。
这听起来不错且易于使用。
但是,这是在 Promise 中使用超时的最佳做法吗?
当然,如果我们想使用 Promises 为函数调用设置超时,则可以使用上述方法。这些行动似乎仍然是一个很好的承诺。但是,这是否被认为是在 Promise 中使用超时的好习惯?如果没有,使用它有什么缺点?
我一直在寻找替代方法,但找不到本地 Promise 方法来做到这一点。
相反,一些外部 Promise 库提供timeout
如下功能:
蓝鸟用品
.timeout()
WinJS
.timeout()
也提供Q也自带
.timeout()
。
但是,Promise.timeout()
它似乎不是标准 ECMAScript 6 API 的一部分(如果我错了,请纠正我)。是否有任何推荐的方法来使用 ES6 Promises 本地处理超时?