在 AngularJS 中创建承诺

Create promise in AngularJS

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

问题是正在调用两个解析。

也许,我使用的是 promise 反模式吗?

这是我的代码:

    function returnMapAsync() {

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

谢谢

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

function returnMapAsync() {

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

您不需要再将其包装成一个承诺,因为 ServerRequest.getNavigationMap() 是一个承诺:

function returnMapAsync() {

    if (navigationMap) {
        return $q.resolve(navigationMap);
    } 

    return ServerRequest.getNavigationMap().then(function(data) {
        navigationMap = data.object;
        return navigationMap;
    });
}