直接返回拒绝的jQuery承诺
问题描述:
对于jQuery的承诺,不带参数的$.when()
返回已解决的承诺。什么是返回被拒绝的jQuery承诺的等价物?直接返回拒绝的jQuery承诺
例如:
(function() { return $.when(); })()
.then(()=>console.log('resolved'))
.fail(()=>console.log('failed'));
打印 “解决”。我只想更改函数返回的内容,以便打印“失败”。
这是为了与jQuery承诺桥接同步的东西。我想要做的唯一事情就是将整个事物包装在一个延迟对象中,例如在那里我可能有:
function doSomething() {
let success = ...;
return success ? $.when() : /* not sure */;
}
我能做到这一点,而不是:
function doSomething() {
return $.Deferred(function (def) {
let success = ...;
if (success)
def.resolve();
else
def.reject();
}).promise();
}
但是,如果我没有包裹之类的东西,这将是更方便,可以像$.when()
直接返回的东西代替。
答
如果你绝对要使用jQuery的承诺,而不是原生的承诺,你可以使用Deferred.reject
:
(function() { return $.when($.Deferred().reject()); })()
.then(()=>console.log('resolved'))
.fail(()=>console.log('failed'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
任何特别原因需要使用jQuery的实现原生的承诺? –
return Promise.reject() –
@Bergi很好找;谢谢! –