angularjs - 调用两次 AngularJS IPromise.then(...) 可以吗?
问题描述
我有一个基于 AngujarJS 1.7 编写的 TypeScript 服务。它的一种方法使用 Promise 异步读取查找值,并将结果缓存在 JavaScript 对象中。这可以。问题是在第一次调用完成之前对同一个 fetch & cache 方法进行了多次调用,因此有多个不必要的 HTTP 请求。绝对最少的代码如下所示:
lookup(lookupType: LookupType): angular.IPromise<IHttpPromiseCallbackArg<LookupInfo[]>> {
return this.api.get(lookupType.contextPath, null, null);
}
接着
const thePromise = lookup(lookupType);
thePromise.then((response: IHttpPromiseCallbackArg<LookupInfo[]>) => {
// ...
return response.data;
});
我的问题是:第二次调用是否会IPromise.then()
返回与第一次调用相同的结果而没有任何副作用?
更准确地说,在这样编写的服务中,loadData()
使用相同参数的第二次调用是否会重用第一次调用所做的承诺?或者以另一种方式问,是否可以在 IPromise 上调用 .then(...) 两次?
class LookupService {
private readonly lookupPromises: Dictionary<IPromise<IHttpPromiseCallbackArg<LookupInfo[]>>> = {};
private readonly lookupData: Dictionary<LookupInfo[]> = {};
loadData(lookupType: LookupType, ...callbacks: Function[]): IPromise<LookupInfo[]> {
if (!this.lookupPromises[lookupType.name]) {
this.lookupPromises[lookupType.name] = this.lookupApi.lookup(lookupType);
}
return this.lookupPromises[lookupType.name].then((response: IHttpPromiseCallbackArg<LookupInfo[]>) => {
this.lookupData[lookupType.name] = response.data;
this.executeCallbacks(callbacks);
return response.data;
});
}
}
解决方案
推荐阅读
- apache - 如何防止apache解码url?
- php - 关于 imap 消息的 PHP 通知
- node.js - Firebase admin.database.enableLogging(true)不起作用
- android - 如何在 Geofence android 中添加后台服务
- c# - 在 Windows 上不使用 Visual Studio 开发 c# 需要什么?
- html - 高度随 ::after 和相对定位而变化
- javascript - 触发它的按钮下的位置下拉菜单
- sql - 使用 VB.Net 在 Excel 中使用 WHERE SQL 命令
- hyperledger-fabric - Hyperledger Composer 节点
- api - Ionic3 API 身份验证