【问题标题】:Async syntax in ES7 [duplicate]ES7 中的异步语法 [重复]
【发布时间】:2018-07-21 19:52:39
【问题描述】:

如何将以下方法转换为异步方法(语法方面):

const download = function(url, dest, callback){
    request.get(url)
    .on('error', function(err) {console.log(err)} )
    .pipe(fs.createWriteStream(`./voices/${dest}`))
    .on('close', callback);
};

此语法不正确:

async function download(function(url, dest, callback)){
    request.get(url)
    .on('error', function(err) {console.log(err)} )
    .pipe(fs.createWriteStream(`./voices/${dest}`))
    .on('close', callback);
};

因为function(url, dest, callabck) 未被识别为函数。

【问题讨论】:

  • async 是 ES2017,而不是 ES6,因此存在问题。
  • 我的错。我在其他地方使用异步方法,这只是我坚持的这种特殊语法!
  • 您的 download 函数在语法上不正确。
  • 你觉得download(function(url, dest, callback))会做什么?

标签: javascript ecmascript-6 es6-promise ecmascript-5


【解决方案1】:

当你想等待一个函数时,你使用异步。在这种情况下,您想要返回一个 Promise 以便方法可以调用并等待它的执行:

const download = (url, dest) => {
  return new Promise((resolve, reject) => {
    request.get(url)
      .on('error', reject)
      .pipe(fs.createWriteStream(`./voices/${dest}`))
      .on('close', resolve);
  });
};

现在您可以将该函数与await 一起使用,用法:

async function somewhere() {
  try {
    await download('http://.../', 'dest');
    // code when completed
  }
  catch (err) {
    // code when error
  }
}

查看更多:

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 2021-03-02
    • 2016-06-05
    • 2018-02-24
    • 1970-01-01
    • 2015-03-29
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多