ES7中的异步语法

时间:2018-02-11 15:18:49

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

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

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)未被识别为函数。

1 个答案:

答案 0 :(得分:1)

如果要等待某个功能,请使用async。在这种情况下,你想要的是返回一个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
  }
}

查看更多: