gpt4 book ai didi

javascript - 等待 JavaScript 事件处理程序

转载 作者:行者123 更新时间:2023-11-28 14:13:20 26 4
gpt4 key购买 nike

我正在努力处理 JavaScript 中的事件处理程序,我试图通过异步/等待使事情正确响应。

下面代码中的问题与 file.on 事件有关 - 我正在努力正确地 promise 它。目前,checkSomething 方法在 file.on 处理程序完成之前返回,因此 returnValue 始终为 false

我可以使用一些建议和最佳实践。

在返回值之前确保在处理程序中检查/设置 returnValue 的好方法是什么?我尝试将 await 关键字放在事件处理程序前面及其回调函数中,但这不起作用,我现在基本上是在摸索,可以使用一些技巧。谢谢。

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
}

最佳答案

由于该事件仅用作继续处理的信号,因此您可以在继续使用内联样式代码之前 promise 并等待其接收。这也意味着 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`;
}

关于javascript - 等待 JavaScript 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com