Jam*_*e G 9 javascript ajax function promise
任何人都可以推荐一种模式,以便立即从返回Promise的函数中检索数据吗?
我的(简化)示例是一个AJAX预加载器:
loadPage("index.html").then(displayPage);
Run Code Online (Sandbox Code Playgroud)
如果这是下载一个大页面,我希望能够检查发生了什么,并可能在稍后阶段使用XHR abort()取消该过程.
我用过的loadPage函数(在Promises之前)返回一个id,让我稍后再这样做:
var loadPageId = loadPage("index.html",displayPage);
...
doSomething(loadPageId);
cancelLoadPage(loadPageId);
Run Code Online (Sandbox Code Playgroud)
在我的基于Promise的新版本中,我认为cancelLoadPage()会拒绝()原始的loadPage()Promise.
我考虑了一些我不喜欢的选项.是否有一种普遍接受的方法来实现这一目标?
出色地。如果使用 Angular ,如果您需要取消正在进行的 HTTP 请求,则可以使用服务timeout使用的参数。$http
打字稿中的示例:
interface ReturnObject {
cancelPromise: ng.IPromise;
httpPromise: ng.IHttpPromise;
}
@Service("moduleName", "aService")
class AService() {
constructor(private $http: ng.IHttpService
private $q: ng.IQService) { ; }
doSomethingAsynch(): ReturnObject {
var cancelPromise = this.$q.defer();
var httpPromise = this.$http.get("/blah", { timeout: cancelPromise.promise });
return { cancelPromise: cancelPromise, httpPromise: httpPromise };
}
}
@Controller("moduleName", "aController")
class AController {
constructor(aService: AService) {
var o = aService.doSomethingAsynch();
var timeout = setTimeout(() => {
o.cancelPromise.resolve();
}, 30 * 1000);
o.httpPromise.then((response) => {
clearTimeout(timeout);
// do code
}, (errorResponse) => {
// do code
});
}
}
Run Code Online (Sandbox Code Playgroud)
由于此方法已经返回一个带有两个 Promise 的对象,因此将任何同步操作返回数据包含在该对象中并不遥远。
如果您可以描述您希望从此类方法同步返回什么类型的数据,这将有助于识别模式。为什么它不能是在异步操作之前或期间调用的另一个方法?
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |