【问题标题】:Create promise in AngularJS在 AngularJS 中创建承诺
【发布时间】:2015-06-24 10:21:31
【问题描述】:

我正在尝试使用 $q 服务在 Angular 中创建一个承诺。 它返回从 Web 服务检索到的对象。如果对象在缓存中,则返回它而不调用 Web 服务。

问题是两个解析被调用。

也许,我是否使用了 Promise 反模式?

这是我的代码:

    function returnMapAsync() {

  return $q(function (resolve, reject) {
    if (navigationMap) {
      resolve(navigationMap);
    } else {
      ServerRequest.getNavigationMap().then(function (data) {
        navigationMap = data.object;
        resolve(navigationMap);
      });
    }
  });
}

谢谢

【问题讨论】:

标签: javascript angularjs promise angular-promise


【解决方案1】:

您不需要将所有内容都包含在 $q() 调用中。为了promisify navigationMap 使用 $q.when:

function returnMapAsync() {

    if (navigationMap) {
        return $q.when(navigationMap);
    }
    return ServerRequest.getNavigationMap();
}

【讨论】:

    【解决方案2】:

    你不需要再把它包装成一个promise,因为ServerRequest.getNavigationMap()是一个promise:

    function returnMapAsync() {
    
        if (navigationMap) {
            return $q.resolve(navigationMap);
        } 
    
        return ServerRequest.getNavigationMap().then(function(data) {
            navigationMap = data.object;
            return navigationMap;
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多