Javascript 方法不等待获取完成
我正在使用以获取视频的元数据。我有一个“提供者”函数,我想返回视频的元数据对象Javascript 方法不等待获取完成,javascript,node.js,promise,Javascript,Node.js,Promise,我正在使用以获取视频的元数据。我有一个“提供者”函数,我想返回视频的元数据对象 const getMetaD = async (mediaID) => { let obj = {}; await ytdl.getInfo(mediaID, {}, async (err, info) => { if (err) console.log(err); let format = await ytdl.chooseFormat(info.format
const getMetaD = async (mediaID) => {
let obj = {};
await ytdl.getInfo(mediaID, {}, async (err, info) => {
if (err) console.log(err);
let format = await ytdl.chooseFormat(info.formats, { quality: 'highest' });
if (format) {
console.log('Format found!', format);
obj = { url: format.url, thumbnail: info.thumbnail, title: info.title };
}
});
return obj;
}
但是,my
getMetaD
函数从不返回在if(format)
块中指定的对象。它将始终返回obj={}
。我做错了什么?为什么我的代码在返回结果之前不等待将结果分配给obj
?您在回调中使用的是wait。它只适用于承诺。但是,通过这样做,您可以实现同样的目标
const getMetaD = (mediaID) => {
return new Promise((resolve, reject) => {
let obj = {};
ytdl.getInfo(mediaID, {}, async (err, info) => {
if (err) console.log(err);
let format = await ytdl.chooseFormat(info.formats, { quality: 'highest' });
if (format) {
console.log('Format found!', format);
obj = { url: format.url, thumbnail: info.thumbnail, title: info.title };
}
resolve(obj);
});
})
}
您正在回调时使用wait。它只适用于承诺。但是,通过这样做,您可以实现同样的目标
const getMetaD = (mediaID) => {
return new Promise((resolve, reject) => {
let obj = {};
ytdl.getInfo(mediaID, {}, async (err, info) => {
if (err) console.log(err);
let format = await ytdl.chooseFormat(info.formats, { quality: 'highest' });
if (format) {
console.log('Format found!', format);
obj = { url: format.url, thumbnail: info.thumbnail, title: info.title };
}
resolve(obj);
});
})
}
如果您不传入回调,
ytdl.getInfo
将返回一个承诺
因此,您可以按如下方式重写代码(此处没有错误检查,但也不会在代码中执行任何操作)
如果您不传入回调,
ytdl.getInfo
将返回一个承诺
因此,您可以按如下方式重写代码(此处没有错误检查,但也不会在代码中执行任何操作)
你可能在等待,而不是承诺。
ytld.getInfo
是否真的接受回调并返回对wait
的承诺?您可能是wait
而不是承诺。ytld.getInfo
是否真的接受回调,并向wait
返回承诺?这应该是公认的答案。公平地说,showsgetInfo()
总是返回一个承诺,但正如您所看到的,只有在没有定义回调的情况下才会返回,这应该是可以接受的答案。公平地说,showsgetInfo()
总是返回承诺,但正如您所看到的,只有在未定义回调的情况下才会返回承诺