【问题标题】:Wrong in promises, program opens and instantly closes承诺错误,程序打开并立即关闭
【发布时间】:2021-03-26 10:50:22
【问题描述】:

代码 ytdl.js

const ytdl = require('ytdl-core')
const fs = require('fs')

downloadAudio = link => {
    return new Promise((resolve, reject) => {
        const stream = ytdl(link).pipe(fs.createWriteStream(`musica.mp3`));
        stream.on('error', () => {
            console.log('Tive problemas para baixar sua música!')
            reject();
        })
        stream.on('close', () => {
            console.log('Baixado!')
            resolve();
        })
    })
}

代码 index.js


const api = require('./ytdl')

api.downloadAudio('https://www.youtube.com/watch?v=I3A45smjVo4').then(()=>{
    console.log('Música baixada!')
}).catch(()=>{
    console.log('Tive algum problema para baixar sua música!')
})

为什么当我编译代码时系统只是关闭?我错过了承诺吗?

Obs:对不起,我是初学者。

【问题讨论】:

  • 系统关闭是什么意思?你的电脑关机?程序退出?你用的是什么框架?
  • 关于系统输出。控制台不打印任何内容。我正在使用 Node.js 和 Ytdl-core
  • 尝试在外面也加入return。拒绝或解决。也许除了“关闭”和“错误”之外还有其他事件,这就是你的承诺没有返回任何东西的原因。
  • 你能告诉我这是怎么做的吗?
  • 已解决!谢谢大家

标签: javascript node.js promise ytdl


【解决方案1】:

如果你想在你的模块外使用downloadAudio(),你需要导出它,否则这个功能只能在模块内部使用。这意味着调用api.downloadAudioundefined,因为downloadAudio 在模块之外不存在。

所以换行

downloadAudio = link => {

exports.downloadAudio = link => {

更多信息可以在documentation找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2022-11-14
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多