变量超出范围(可能)——未定义

Variable out of scope (probably) - undefined

所以这段代码从 https://sjp.pl/ 网站返回 json 中的单词描述,用户之前在请求 json body

中提供的单词

问题是我想在 res.send 中发回 var 'desc' 但它未定义。我如何访问并发送它?

我认为那是因为 item.push($(this).text()) 只在这个 axios 函数中工作,并且只能在这个范围内访问


const item = [];
var desc;

app.post('/test', (req, res) => {
    const { word } = req.body;

    if(!word) {
        res.status(418).send({error: 'no word provided'})
    }

    console.log(word)

    axios(`https://sjp.pl/${word}`).then(res => {

        const html = res.data
        const $ = cheerio.load(html)

        $('p').each(function() {
            item.push($(this).text())
        })

        desc = item[3]

        console.log(desc) // working until here
    })

    console.log(desc) // undefined here

    res.send({
        description: `${desc}`
    })
})

axios 中使用 res,如下所示。您得到 undefined 是因为 desc 范围在该匿名函数内结束。此外 axiosasync。您可能需要使用 await 使其成为 sync 或者可以按照我在下面提出的想法。

const item = [];
var desc;

app.post('/test', (req, res0) => {
    const { word } = req.body;

    if(!word) {
        res0.status(418).send({error: 'no word provided'})
    }

    console.log(word)

    axios(`https://sjp.pl/${word}`).then(res => {

        const html = res.data
        const $ = cheerio.load(html)

        $('p').each(function() {
            item.push($(this).text())
        })

        desc = item[3]

        res0.send({
            description: `${desc}`
        })
    })
})