我是javascript的新手,所以我尝试使用API从一首歌曲中删除人声,所以我想做一些检查,如果splitstatus为success,我将调用函数getlink,但如果splitstatus为progress,我将继续检查它,直到splitstatus成功,然后调用函数getlink。但是当我运行我的代码时,结果只返回"check 1“。对于其他信息,拆分状态只有两个结果“成功”或“进度”,splitlink内部是http links
这是我的代码
var vidid = "";
var splitstatus = "";
var splitlink = "";
function ceksplit(x) {
setTimeout(function () {
axios.get(`https://www.lalal.ai/api/check/?id=${x}`).then((res) => {
splitstatus = res.data.task.state;
});
}, 30000);
}
function getlink(x) {
axios.get(`https://www.lalal.ai/api/check/?id=${x}`).then((res) => {
splitlink = res.data.split.accompaniment;
});
}
app.post("/uploads", async(req, res) => {
await ceksplit(vidid);
console.log("cek 1");
if (splitstatus === "progress") {
await ceksplit(vidid);
console.log("cek 2");
}
if (splitstatus === "progress") {
await ceksplit(vidid);
console.log("cek 3");
}
if (splitstatus === "progress") {
await ceksplit(vidid);
console.log("cek 4");
}
if (splitstatus === "progress") {
await ceksplit(vidid);
console.log("cek 5");
}
if (splitstatus === "success") {
await getlink(vidid);
console.log(splitlink);
}
});有人能帮我吗?希望你们能理解我的要求,谢谢:D。
发布于 2021-01-13 03:03:31
解决方案
可以使用setInterval来实现
必须删除
var vidid = "";
var splitstatus = "progress";
var splitlink = "";
async function ceksplit(x) {
let res = await axios.get(`https://www.lalal.ai/api/check/?id=${x}`);
splitstatus = res.data.task.state;
}
async function getlink(x) {
let res = await axios.get(`https://www.lalal.ai/api/check/?id=${x}`);
splitlink = res.data.split.accompaniment;
}
app.post("/uploads", async (req, res) => {
let _interval = setInterval(async () => {
if (splitstatus === "progress") {
await ceksplit(vidid);
} else if (splitstatus === "success") {
await getlink(vidid);
clearInterval(_interval);
} else {
console.log(splitstatus);
// clearInterval(_interval);
}
}, 3000);
});https://stackoverflow.com/questions/65689808
复制相似问题