2017-09-30 75 views
2

我有下載使用filesaver.js問題端點文件的功能是我需要的函數傳遞到異步等待的方法如何我可以通過嵌套承諾異步等待

fileDownload =() => { 
    fetch('http://localhost:3000/api/buildings/1/assets.xlsx') 
     .then(res => res.blob()) 
     .then(blob => saveAs(blob, 'assets.xlsx')) 
} 

怎樣才能改變這與異步等待這個嵌套的承諾? (該功能是確定)

+4

返回'''fetch'''會使'''fileDownload'''你可以使用一個承諾等待 – Wainage

+0

爲什麼你需要通過這個承諾作爲開始? 'saveAs'是做什麼的?現在,這只是一個執行操作並且不返回值的函數。但是,是的,你可以在'fetch'前面使用'return',這將成爲一個承諾。但我想知道爲什麼你需要使這個代碼同步開始。 – Andrew

+0

'將函數傳遞給異步等待方法' - 什麼是異步等待方法?你明白async/await是承諾的語法糖,那麼,返回一個承諾是你需要使用'await'嗎?注意,你的'fileDownload'不會**返回一個承諾 –

回答

0

您可以使用代碼:

fileDownload = async() => { 
    let response = await fetch('http://localhost:3000/api/buildings/1/assets.xlsx'); 
    let blob = await response.blob(); 
    await saveAs(blob, 'assets.xlxs'); 
}; 
+0

雖然這可能回答這個問題,但最好解釋答案的基本部分,可能是OPs代碼的問題。 – pirho