在AngularJS中创建promise

Create promise in AngularJS

本文关键字:promise 创建 AngularJS      更新时间:2023-09-26

我正试图用$q服务在Angular中创建一个promise。它返回从web服务检索到的对象。如果对象在缓存中,则返回该对象而不调用web服务。

问题是两个解决方案正在被调用。

也许,我在用承诺反模式吗?

这是我的代码:

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

感谢

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

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

由于ServerRequest.getNavigationMap()是一个promise:,因此不需要再将其包装成一个promise:

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