[英]Await-ing a javascript event handler
我正在努力处理 javascript 中的事件处理程序,我试图通过异步/等待使事情正确响应。
下面代码中的问题与file.on
事件有关——我正在努力正确地承诺它。 目前checkSomething
方法在file.on
处理程序完成之前返回,因此returnValue
始终为false
。
我可以使用一些建议和最佳实践。
go 确保在返回值之前在处理程序中检查/设置returnValue
的好方法是什么? 我已经尝试将await
关键字放在事件处理程序的前面,并在其回调 function 中,但这没有用,我基本上在这一点上勉强可以使用一些技巧。 谢谢。
const axios = require('axios')
const fs = require('fs')
/*....*/
let isItChecked = await checkSomething()
async function checkSomething() {
let returnValue = false
const response = await axios.get('https://someUrl.com', {
responseType: 'stream'
})
const file = fs.createWriteStream('./localFile.txt')
response.data.pipe(file)
file.on('finish' () => {
performATask().then((result) => {
if (result == 'good') {
returnValue = true //need to make sure this is evaluated before returning
}
})
})
return returnValue
}
由于该事件仅用作继续处理的信号,因此您可以在继续使用内联样式代码之前承诺并await
其接收。 这也意味着不需要在嵌套函数的外部 scope 中声明result
(由于异步设置,它无论如何都不起作用):
async function checkSomething() {
const response = await axios.get('https://someUrl.com', {
responseType: 'stream'
});
const file = fs.createWriteStream('./localFile.txt');
response.data.pipe(file);
await new Promise( resolve=> file.on(`finish`, resolve)); // wait here
const result = await performATask();
return result == 'good`;
}
你已经接近了,你只需要返回一个 promise,它会在执行到你想要的点(你有评论的地方)后解决。
其他要记住的事情:
async
函数中使用await
===
而不是==
;
结束语句 sconst axios = require('axios');
const fs = require('fs');
/*....*/
let isItChecked = await checkSomething();
async function checkSomething() {
const response = await axios.get('https://someUrl.com', {responseType: 'stream'});
const file = fs.createWriteStream('./localFile.txt');
response.data.pipe(file);
return new Promise(resolve =>
file.on('finish', () =>
performATask().then(result => resolve(result === 'good'))));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.