在同步上下文中调用defer.notify()不会执行回调

时间:2014-08-16 14:18:12

标签: javascript angularjs promise angular-promise

请考虑以下代码段( demo ):

  function asyncCall() {
    var result = $q.defer();
    result.notify("Notify: sync");
    setTimeout(function () {
      result.notify("Notify: async (timeout)");
    }, 1000);
    return result.promise;
  }

  asyncCall().then(null /* success */, null /* error */, 
    function (notify) {
       console.log("Caller Notify: " + notify);
    }
  );

第一个通知 - Notify: sync - 不会触发通知回调,我希望在控制台中看到:

Notify: sync
Notify: async (timeout)

但我得到了:

Notify: async (timeout)

有没有办法去排队"在同步上下文中调用notify并执行两次回调?

1 个答案:

答案 0 :(得分:1)

根据@Benjamin Gruenbaum的建议,我发表评论作为答案:

同步和异步调用之间没有区别。

问题是您的回调是在result.notify("Notify: sync"); 被解雇后注册的。