Javascript AJAX—具有嵌套承诺 即使我在确认中按了取消,那么preadd的功能, 我无法获取存储在rem变量中的值。 即使返回false,底部的函数也在执行。

Javascript AJAX—具有嵌套承诺 即使我在确认中按了取消,那么preadd的功能, 我无法获取存储在rem变量中的值。 即使返回false,底部的函数也在执行。,javascript,jquery,ajax,Javascript,Jquery,Ajax,任何人都可以指导我。即使我在确认内按取消。然后预添加功能: 我无法获取存储在rem变量中的值。 即使返回false,底部的函数也在执行。 说了这句话之后,要么使用then,要么使用success。如果你想阻止CB地狱,一定要用承诺 一个具有承诺的更好的代码结构如下 resolveCB of preadd.then( resolveCB, rejectCB) will always be called unless an until there is some error or promise i

任何人都可以指导我。

即使我在确认内按取消。然后预添加功能: 我无法获取存储在rem变量中的值。 即使返回false,底部的函数也在执行。 说了这句话之后,要么使用then,要么使用success。如果你想阻止CB地狱,一定要用承诺

一个具有承诺的更好的代码结构如下

resolveCB of preadd.then( resolveCB, rejectCB) will always be called unless an until there is some error or promise is rejected. Returning false is not same as rejecting promise.   

要么使用,要么成功。不要两者都用。这几乎肯定会引起混乱。在给出的例子中,rem的范围不清楚,但这加上成功中承诺的进一步链接可能是原因。尽管我自己解决了这个问题。这个答案让人大开眼界。它向我解释了使用承诺和回电的正确方法。谢谢你,谢谢你抽出时间。我已经接受了你的回答。
     Promise Preadd has no knowledge of cancel. You are returning a value false when cancel is clicked.     
 Assuming rem is a local variable of success function, the variable dies when success function is completed. A bad way of coding would be creating rem in  larger scope , eg sibling of preadd
resolveCB of preadd.then( resolveCB, rejectCB) will always be called unless an until there is some error or promise is rejected. Returning false is not same as rejecting promise.   
var preadd = $.ajax({
   type: 'POST',
   url: url,
   data: {
     some data
  }

preadd.then(function() {
     // Success of PreAdd
          return chkdup1() 
}).then(function(){
    // Success of chkdup1
    //by some internal logic build rem
    if(rem)
    return Promise.resolve(rem )
    return Promise.reject(rem)
}).then(function(data){

     // rem was true
      fnensadd();
},function(error){
    // rem was false

 });