考虑以下代码段(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调用并执行两次回调?

最佳答案

正如@Benjamin Gruenbaum所建议,我将对问题的评论作为答案:

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

问题是result.notify("Notify: sync");触发后您的回调已注册。

关于javascript - 在同步上下文中调用defer.notify()不会执行回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25341024/

10-13 00:42