gpt4 book ai didi

javascript - 编写轮询方法(使用 Typescript 和 AngularJS)的最佳(正确)方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:35 24 4
gpt4 key购买 nike

我正在尝试编写一个轮询方法,定期轮询服务器以检查是否已创建 zip 文件。

我想要完成的是:

  1. 调用(ajax)在服务器上创建 zip 文件的 API
  2. 调用 (ajax) 另一个检查 zip 文件是否已经创建的 API(轮询方法)
  3. 一些后续过程

这是我的代码片段↓

var success: boolean = false;
//1. requests a server to create a zip file
this.apiRequest.downloadRequest(params,ApiUrl.URL_FOR_DOWNLOAD_REQUEST)
.then((resObj) => {
var apiRes: IDownloadService = resObj.data;
if (apiRes.status[0].statusCode == "000") {
success = true;
} else {
//Error
}
}).then(() => {
if (success) {
//2. polls the server to check if the zip file is ready
<- Polling method↓ ->
this.polling(params).then((zipUrl) => {
console.log(zipUrl); //always logs zipUrl
//some subsequent process...
});
}
});

谁能举出一些适用于这种情况的轮询方法示例?

添加:

private polling(params: any): ng.IPromise<any> {
var poller = () => this.apiRequest.polling(params, ApiUrl.URL_FOR_POLLING);
var continuation = () => poller().then((resObj) => {
var apiRes: IDownloadService = resObj.data;
if (apiRes.zipFilePath == "") {
return this.$timeout(continuation, 1000);
} else {
return apiRes.zipFilePath;
}
})
var result: ng.IPromise<any> = continuation();
return result;
}

最佳答案

基本上将方法抽象出来如下所示:

let poll = () => this.apiRequest.downloadRequest(params,ApiUrl.URL_FOR_DOWNLOAD_REQUEST)

let continuation = () => poll().then((/*something*/)=> {
/*if still bad*/ return continuation();
/*else */ return good;
})

continuation().then((/*definitely good*/));

更新

按照下面评论中的要求:

return this.$timeout(continuation, 1000);

这是启动摘要循环所必需的。

关于javascript - 编写轮询方法(使用 Typescript 和 AngularJS)的最佳(正确)方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32113876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com