异步功能的好处

时间:2017-06-23 13:09:56

标签: javascript

以下代码来自MDN网站:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

function getProcessedData(url) {
  return downloadData(url) // returns a promise
    .catch(e => {
      return downloadFallbackData(url); // returns a promise
    })
    .then(v => {
      return processDataInWorker(v); // returns a promise
    });
}

文档说这可以转换为这样的异步函数:

async function getProcessedData(url) {
  let v;
  try {
    v = await downloadData(url); 
  } catch(e) {
    v = await downloadFallbackData(url);
  }
  return processDataInWorker(v);
}

我不明白async函数在这个例子中的好处是什么,因为这两种方法都是异步的,都需要9行代码。

1 个答案:

答案 0 :(得分:1)

我认为最好的答案只包含一些很酷的 await 示例。

1)异步循环,例如按顺序下载10个文件:

async function download10(){
  var result=[];
  for(var i=0;i<10;i++){
    result.push(await downloadFile(i));
 }
return result;
}
download10().then(console.log);

2)链接异步结果:

try{
  sendFile( await getFile( await checkandReturn(Filepath)));
}catch(e){
  console.error("sending file failed");
}

用Promises做这件事看起来有点难看:

1)

function download10(i=0,result=[]){
 return new Promise(function(res){
   downloadFile().then(function(file){
     result.push(file);
     if(i<10){
       res(download10(i+1,result));
     }else{
       res(result);
     }
   });
 });
}

2)

checkandReturn(Filepath).then(function(filepath){
  return getFile(filepath);
}).then(function(file){
 return sendFile(file);
}).catch(console.log);