【问题标题】:my asynchronous function is showing promise pending我的异步函数显示 promise pending
【发布时间】:2022-12-03 00:12:47
【问题描述】:

我在很多地方等待我的功能,但它仍然显示有待处理的承诺。

我正在尝试通过 url 获取 YouTube 视频缩略图。

我用这段代码创建了一个 index.js 文件:


const checkurl = require('./checkurl.js');

console.log(checkurl('https://youtu.be/NbT4NcLkly8'));

并且 checkurl.js 有:


const getvideoid = require('get-video-id');

const https = require('https');

const GOOGLEKEY = process.env['GOOGLEKEY'];

module.exports = async function(url) {

  const urlinfo = getvideoid(url)

  if (urlinfo.service == 'youtube' && urlinfo.id !== undefined) {

    const result = await checkid(urlinfo.id)

    return result

  } else {

    return false

  };

};

function checkid(id) {

  return new Promise((resolve, reject) => {

    const url = 'https://www.googleapis.com/youtube/v3/videos?key=' + GOOGLEKEY + '&part=snippet&id=' + id

    const req = https.request(url, (res) => {

      res.setEncoding('utf8');

      let responseBody = '';

      res.on('data', (chunk) => {

        responseBody += chunk;

      });

      res.on('end', () => {

        const data = JSON.parse(responseBody);

        if (data.items[0]) {

          const thumbnail = data.items[0].snippet.thumbnails

          resolve(thumbnail);

        } else {

          resolve(undefined);

        };

      });

    });

    req.on('error', (err) => {

      reject(err);

    });

    req.end();

  });

};

我等待我所有返回承诺的函数,但我仍然得到未决的承诺 idk 为什么。

我还尝试解决第二个功能中的承诺,但仍然相同。

【问题讨论】:

    标签: javascript node.js asynchronous https youtube-api


    【解决方案1】:

    checkurl 返回一个 Promise,因为它是一个 async 函数。

    您需要先await.then它,然后才能console.log它的值。

    // in an async function
    console.log(await checkurl('https://youtu.be/NbT4NcLkly8'));
    
    checkurl('https://youtu.be/NbT4NcLkly8').then(console.log)
    

    【讨论】:

    • 是的,它奏效了,谢谢。但我是新手,所以目前无法打勾。
    • @playfactgaming 我相信在您将答案标记为已接受之前会有 15 分钟的延迟
    猜你喜欢
    • 2020-07-09
    • 2017-10-16
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多