在 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;
});
}
我正在尝试使用 $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;
});
}