我正要把我的电脑从窗户扔出去。我只是看不到为什么这不起作用:
async function play(message, msg) {
addytb(message, msg[3]).catch(err => {console.log('err');});
}
async function addytb(message, url) {
ytbapi.getVideo(url)
.then(video => {
message.channel.send(`J'ai ajouté ${video.title} à la queue !`);
queue.get(message.guild.id).push({"url": url, "type": 'youtube', "title": video.title});
})
.catch(() => {
message.channel.send(`J'ai pas réussi à ajouter ça à la queue !`);
throw 'error';
});
}
我已经在互联网上搜索了2个小时,但找不到为什么我的诺言变暖不断。我认为这是因为ytbapi.getVideo()是异步的,但我不知道该怎么办。
谢谢。
答案 0 :(得分:0)
首先,除非您正在等待其中的异步函数,否则无需在函数中使用'async'关键字。 我已经对代码进行了一些更改,您可以尝试:
function play(message, msg) {
addytb(message, msg[3])
.then((data) => {
//do something with data
})
.catch(err => {
console.log('err is: ', err);
});
}
function addytb(message, url) {
return new Promise((resolve, reject) => {
ytbapi.getVideo(url)
.then(video => {
message.channel.send(`J'ai ajouté ${video.title} à la queue !`);
queue.get(message.guild.id).push({
"url": url,
"type": 'youtube',
"title": video.title
});
resolve("success");
})
.catch((err) => {
message.channel.send(`J'ai pas réussi à ajouter ça à la queue !`);
console.log(err)
reject(err);
});
});
}
如果您真的想尝试异步/等待:
async function play(message, msg) {
try {
const data = await addytb(message, msg[3]);
//do something with data
} catch (err) {
console.log('err is: ', err);
}
}
function addytb(message, url) {
return new Promise(async (resolve, reject) => {
try {
const video = await ytbapi.getVideo(url);
message.channel.send(`J'ai ajouté ${video.title} à la queue !`);
queue.get(message.guild.id).push({
"url": url,
"type": 'youtube',
"title": video.title
});
resolve("success");
} catch (err) {
message.channel.send(`J'ai pas réussi à ajouter ça à la queue !`);
console.log(err)
reject(err);
}
});
}
ps:您可能需要进行一些修改,因为我没有机会尝试代码。 希望这会有所帮助:)