【发布时间】:2015-06-19 11:17:29
【问题描述】:
通过超时承诺函数调用
我看到许多资源都提供了类似的示例,这些示例使用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 本地处理超时?
【问题讨论】:
-
鉴于 ES6 Promise 是不可取消的,除了
race处理延迟拒绝的任务之外,您无能为力。 -
我也通过可用的官方 ES6 Promise 功能进行了探索,也找不到其他类似的方式。
标签: javascript promise ecmascript-6 es6-promise