app.get('/test',(req,res)=>{
doSomething().then(res.sendFile(path,(err)=>{
if (err) {
console.log('err')
} else {
console.log('Sent:', fileName)
}
}))
異步函式 doSomethig(){
let conf = { url:'', format:'jpeg', out:'./out/test.jpg' }
conf.url = "someurl";
return new Promise(async () => {
let browser = await puppeteer.launch({
headless: true,
//ignoreDefaultArgs: ['--disable-extensions']
});
console.log(`START => Contacting URL: ${conf.url}`)
const page = await browser.newPage()
await page.setViewport({ width: 1024, height: 768 })
await page.goto(conf.url)
await page.waitForFunction('window.status === "ready"')
console.log(`DONE => Contacting URL: ${conf.url}`)
console.log(`START => Screenshot: ${conf.out}`)
const data = await page.screenshot({
path: conf.out,
quality: 100,
omitBackground: true,
type: conf.format
})
console.log(`DONE => Screenshot: ${conf.out}`)
//fs.writeFile(conf.out, data, "binary",function(err) { });
//console.log(data)
await browser.close();
})
}
})
doSomething() 創建一個檔案并將其保存在本地目錄中,我想將其作為對 get 請求的回應發送,但 get res.sendfile 進入 err 分支并列印錯誤,因為 doSomething 函式沒有完成創建檔案。
請幫助解決問題
uj5u.com熱心網友回復:
您沒有.then()正確使用處理程式:您需要將一個函式傳遞給它,該函式將在 promise 解決后呼叫。相反,您正在res.sendFile() 立即執行。
正確的語法:
doSomething().then(() => {
res.sendFile(…);
});
然后在 中doSomething,您無緣無故地創建了一個新的承諾,并且語法不正確。
它應該如下所示:
async function doSomething() {
let conf = { url:'', format:'jpeg', out:'./out/test.jpg' };
conf.url = "someurl";
let browser = await puppeteer.launch({
headless: true,
//ignoreDefaultArgs: ['--disable-extensions']
});
…
await browser.close();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/507660.html
標籤:javascript 表示
