我都快把我的电脑扔出窗外了。我就是不明白为什么这不管用:
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()是异步的,但是我不知道该怎么做。
谢谢。
发布于 2019-07-04 15:10:06
第一件事是不需要在函数中使用'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:你可能需要一些修改,因为我没有机会尝试代码。希望这能有所帮助:)
https://stackoverflow.com/questions/56879011
复制相似问题