以下代码来自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行代码。
答案 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);