@cmstops/pro-compo
Version:
[物料平台文档中心](https://arco.design/docs/material/guide)
47 lines (46 loc) • 1.29 kB
JavaScript
import request from "./request.js";
function getTranscodingProgress(BASE_API, id) {
return request(BASE_API, {
url: `/poplar/v2/transcoding/progress?id=${id}`,
method: "get"
});
}
class TranscodingTask {
constructor(file) {
this.file = file;
this.pollCount = 0;
}
start(BASE_API, callback) {
if (!this.file.id)
return Promise.reject(new Error("file error"));
return new Promise((resolve, reject) => {
const handleTranscoding = async () => {
const { code, message } = await getTranscodingProgress(
BASE_API,
this.file.id
);
if (code !== 0)
reject(new Error(message));
if (message.state === 1) {
callback(message.progress);
if (message.progress === 1 && ++this.pollCount === 3) {
this.abort();
resolve(false);
}
} else if (message.state === 2) {
this.abort();
resolve(false);
} else if (message.state === 3) {
this.abort();
resolve(true);
}
};
this.taskInterval = setInterval(handleTranscoding, 5e3);
});
}
abort() {
clearInterval(this.taskInterval);
this.taskInterval = null;
}
}
export { TranscodingTask, getTranscodingProgress };