javascript - 如何让基于事件发射器的代码在 NodeJS 中等待?

标签 javascript node.js ffmpeg dom-events

我可能问错了问题,因为我对此没有太多经验。基本上,我有这个代码:

videoshow(images, videoOptions)
  .audio('song.mp3')
  .save('video.mp4')
  .on('start', function (command) {
    console.log('ffmpeg process started:', command)
  })
  .on('error', function (err, stdout, stderr) {
    console.error('Error:', err)
    console.error('ffmpeg stderr:', stderr)
  })
  .on('end', function (output) {
    console.error('Video created in:', output)
  })

来自this library

据我所知,它是异步运行的,但即使我在它前面添加了await,我也无法让它等待。

我希望代码块停止,直到 end 完成并且图像已转换为视频。我没有看到任何例子,我不确定我做错了什么。

最佳答案

你可以将它包含在一个 promise 中:

async function run() {
  return new Promise((resolve, reject) =>
    videoshow(images, videoOptions)
      .audio('song.mp3')
      .save('video.mp4')
      .on('start', function (command) {
        console.log('ffmpeg process started:', command)
      })
      .on('error', function (err, stdout, stderr) {
        console.error('Error:', err)
        console.error('ffmpeg stderr:', stderr)
        reject(err);
      })
      .on('end', function (output) {
        console.error('Video created in:', output)
        resolve(output);
      })
  )
}


(async () => {
  await run();
  // This is were you put your code
})();

关于javascript - 如何让基于事件发射器的代码在 NodeJS 中等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54858362/

相关文章:

javascript - scrapy-splash 渲染多于第一页

node.js - 如何从 basicAuth (Express) 中注销

node.js - 正则表达式(sass 变量)

html - 在 Firefox 33 中无法播放 HTML5 视频

Javascript 函数返回函数代码行或 "{[native code]},"我做错了什么?

php - 将 javascript 与 php 混合时的性能和缓存

javascript - Jest 全局拆解在测试完成之前运行?

android - FFMpeg avcodec_decode_video2 第一帧没有结果

c# - ProcessStartInfo C#中文件名(不是路径)中的空格

javascript - 根据 DOM 元素的 RGB 或十六进制值切换颜色