jQuery Promise不会触发.then()或.done()

时间:2017-01-23 23:45:11

标签: javascript jquery promise jquery-deferred deferred

我试图使用一个承诺来确保某个函数在另一个函数返回之前不会触发。我看过很多例子,其他的例子'问题等等,据我所知,我的语法是正确的,但我的.then(function())不会运行,所以我必须遗漏一些东西。

function previewMaster () {

var dfd = $.Deferred(); 

  function prevAndTest() {
    return true;
  }

  var doneYet = false;

  var intvl = setInterval(function() {
    if (doneYet === false) {
      doneYet = prevAndTest();
      //reassign doneYet until true
    } else {
      clearInterval(intvl);
      dfd.resolve;
     return dfd.promise();
    }
  }, 1000);
} 

.then().done()都不在这里工作:

var promise = previewMaster();
  promise.then(function() {
    alert("finished");
  });

1 个答案:

答案 0 :(得分:2)

您的解决方案不起作用,因为方法previewMaster未返回承诺:

function previewMaster () {
    ...
    return dfd.promise();
} 

并且因为当您想要解决承诺时需要调用resolve函数:

dfd.resolve(); 

请参阅此处的完整示例:

function previewMaster () {

    var dfd = $.Deferred(); 

    function prevAndTest() {
        return true;
    }

    var doneYet = false;

    var intvl = setInterval(function() {
        if (doneYet === false) {
        doneYet = prevAndTest();
        //reassign doneYet until true
        } else {
        clearInterval(intvl);
        dfd.resolve(); // <- resolve method must be called to resolve the promise.
        // return dfd.promise(); // <- Do not return the promise here
        }
    }, 1000);
    return dfd.promise(); // <- Return the promise here
}