2017-06-06 115 views
2

对于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()直接返回的东西代替。

+3

任何特别原因需要使用jQuery的实现原生的承诺? –

+0

return Promise.reject() –

+0

@Bergi很好找;谢谢! –

回答

1

如果你绝对要使用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>