如果承诺尚未解决,我想在一定时间后抛出错误。像
这样的东西promiseDelayReject(delay){ //set timeout omitted
var t = (return value of $.ajax)
if(timeUp)
throw errorAndRejectPromise;
else
keepGoingAndResolvePromise
一些想法?
答案 0 :(得分:0)
您只需拨打reject
内Promise
的{{1}}参数即可。如果您之前完成了任何操作,请使用setTimeout
clearTimeout()

答案 1 :(得分:0)
好的,所以我们需要能够判断承诺是否先解决,这在本机Promise API中是不存在的,但是我们可以通过以下方式来实现:
//unfortunately the native Promise API
//doesnt have an isResolved() | isAccepted() | isRejected() method
//so we have to monkey our way around it
function isResolved(promise) {
var resolved = true
promise.then(function(){ resolved = false })
.catch(function(){ resolved = false })
return resolved
}
然后你可以在setTimeout
内使用它来抛出:
setTimeout(function(){
try {
if(!isResolved(prommise)) throw "stuff"
} catch(e) {
//do what you wanted here
}
}, delay)
虽然注意try catch
必须在setTimeout
内,因为你不能扔到它收到的函数之外。如果你可以使用回调或承诺链来处理你想要抛出的错误