2016-04-27 17 views
3

这可能是一个愚蠢的错误,但是在这里。

我需要在$ .ajax()调用的成功函数内部拒绝jQuery Promise。返回值“success”是一个布尔值。

function doSomething() { 

     var myPromise = $.ajax({ 

      method: "POST", 
       url: "/url/to/use", 
       data: {"value":$("#value").val()}, 
       success: function(data) { 
        if (data.success == false) { 
         ConfirmMessage.showErrorMessage(data.messages[0]); 
         return new $.Deferred().reject().promise(); 
        } else { 
         // do other stuff 
        } 
       } 
      }); 

      return myPromise; 

     } 

的DoSomething的()在随后()链中稍后:

doSomething().then(doSomethingElse).then(soOn).then(soForth); 

所以我需要能够拒绝承诺,挣脱锁链。

帮助赞赏。

+1

在解决问题后,您不能拒绝ajax承诺。也许你可以返回另一个在ajax回调中被标记为已解析或被拒绝的promise对象,而不是返回ajax承诺本身。 – apokryfos

回答

4

你不能从success回调中做到这一点。无论如何,没有理由使用它。只需使用then

function doSomething() { 
    return $.ajax({ 
     method: "POST", 
     url: "/url/to/use", 
     data: {"value":$("#value").val()}, 
    }).then(function(data) { 
     if (data.success == false) { 
      ConfirmMessage.showErrorMessage(data.messages[0]); 
      return new $.Deferred().reject().promise(); 
     } else { 
      // do other stuff 
     } 
    }); 
} 
+0

这样做。希望这将成为最近JQ承诺相关问题的一段时间。谢谢。 – Jason

相关问题