为什么这个Promise无法正常运作?

比诺特

我是jQuery Promises的新手,但是我在应用程序的其他部分很好地使用了它们,但是这一功能似乎并未按预期工作。似乎在执行下一个代码之前,它没有等待返回。

function setActivityOnGrid(){
...snip...
var sameActivityCnt = $(actId).length;
  if(sameActivityCnt){
    sameActivityDialog().then(function(retVal) {
      if(retVal == true){
        activityid += "-"+sameActivityCnt++;
      }
    });
}
//code here is being executed before the dialog is even shown
}

function sameActivityDialog(){
  var deferred = $.Deferred();

  bootbox.confirm("You have already added this activity. Would you like to add it again?", function(result) {
    deferred.resolve(result);
  });
  return deferred.promise();
}
寿木

将移至//code here is being executed before the dialog is even shown此处:

var sameActivityCnt = $(actId).length;
if(sameActivityCnt){
  sameActivityDialog().then(function(retVal) {
    if (retVal === true){
      activityid += "-"+sameActivityCnt++;
    }

    // code goes here!!!!

  });
}

在then回调函数内部(或稍后链接的then函数)。

备择方案

var sameActivityCnt = $(actId).length;
sameActivityDialog().then(function(retVal) {
  if(sameActivityCnt && retVal === true){
    activityid += "-"+sameActivityCnt++;
  }

  // code goes here!!!!

});

或者

var promise = sameActivityDialog();
var sameActivityCnt = $(actId).length;

if(sameActivityCnt){
  promise = promise.then(function(retVal) {
    if (retVal === true){
      activityid += "-"+sameActivityCnt++;
    }
    return retVal;
  });
}

promise = promise.then(function(retVal) {
  // code goes here!!!!
  return retVal;
});

而且,如果您将此逻辑拆分为较小的函数,则实际上可以很好地构成:

function doIf(condition, fn) {
  return function(data) {
    if (condition) {
      return fn(data);
    } else {
      return data
    }
  };
}

function appendID(retVal) {
  if (retVal === true){
    activityid += "-"+sameActivityCnt++;
  }
  return retVal;
}

function doMoreStuff(retVal) {
  // code goes here!!!!
  return retVal;
}

var sameActivityCnt = $(actId).length;

sameActivityDialog()
  .then(doIf(sameActivityCnt, appendID))
  .then(doMoreStuff);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这个Z-index无法正常运作?

来自分类Dev

为什么这个Z-index无法正常运作?

来自分类Dev

为什么这个JavaScript无法运作?

来自分类Dev

为什么这个XPath无法运作?

来自分类Dev

为什么grunt-contrib-watch livereload无法正常运作?

来自分类Dev

为什么我的ng-repeat无法正常运作?

来自分类Dev

蓝鸟Promise.map无法正常运作

来自分类Dev

为什么这个lua gsub无法正常工作?

来自分类Dev

为什么这个string.search无法正常工作?

来自分类Dev

为什么这个javascript闭包无法正常运行?

来自分类Dev

为什么这个非常简单的JQuery无法正常工作?

来自分类Dev

为什么这个if-else无法正常工作?

来自分类Dev

为什么这个JavaScript无法在Rails中正常工作?

来自分类Dev

为什么这个CSS Gooey无法正常工作?

来自分类Dev

为什么我的vfl无法运作?

来自分类Dev

为什么我的倒数功能无法运作?

来自分类Dev

为什么我的JavaScript无法运作?

来自分类Dev

Typeid无法正常运作

来自分类Dev

程序无法正常运作

来自分类Dev

FiPy无法正常运作

来自分类Dev

atomicInc()无法正常运作

来自分类Dev

AsyncTask无法正常运作

来自分类Dev

sed无法正常运作

来自分类Dev

JavaScript无法正常运作

来自分类Dev

为什么这个查询不能正常工作?

来自分类Dev

为什么这个等待线程完成的Rust代码无法正常工作?

来自分类Dev

为什么这个具有基于Java配置的Spring应用程序无法正常工作

来自分类Dev

为什么这个繁星点点的代码无法正常工作?

来自分类Dev

为什么这个来自git ls-remote的正则表达式无法正常工作?