【问题标题】:jQuery Promise doesn't trigger .then() or .done()jQuery Promise 不会触发 .then() 或 .done()
【发布时间】:2017-06-08 15:10:06
【问题描述】:

我正在尝试使用承诺来确保某个函数在另一个函数返回之前不会触发。我查看了很多示例,其他人的问题等,据我所知,我的语法是正确的,但我的 .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");
  });

【问题讨论】:

  • dfd.resolve; 是一个函数...使用dfd.resolve("value to resolve the promise to because that's what promises do");
  • 另外,你在哪里返回 dfd.promise() 是完全错误的 - 你需要从 previewMaster 函数返回它,而不是回调到 setInterval
  • @JaromandaX 是绝对正确的。文档:api.jquery.com/deferred.resolve
  • 无法在 setInterval 内返回。 previewMaster 没有返回任何内容
  • 你可以在 setInterval 内部返回 - 返回的值不会去任何地方:p

标签: javascript jquery promise jquery-deferred deferred


【解决方案1】:

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

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

因为当你想要解决 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
} 

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2020-12-27
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多