【问题标题】:Confusion with Callback Functions in Node.js与 Node.js 中的回调函数混淆
【发布时间】:2020-11-23 17:04:31
【问题描述】:

我一直在从事一些新的 API 项目,但在涉及回调时我有点困惑。本质上,我希望能够从异步函数中返回一个值。每次返回值都是空的!

请帮忙!

const services = []
const nextechStatusRequest = function () {
    // Web request to Nextech 
    axios.get(statusURI).then(response => {
        // use Cheerio API to parse HTML Data
        const $ = cheerio.load(response.data)

        // Clean up
        let data = $('table').text()
        data = data.replace(/(\r\n|\n|\r)/gm, "")
        data = data.split("•")


        // Iterate through all services in string then create an Object to put into Services array
        for (const item of data) {
            if(item !== ''){
                itemTrimmed = item.trim()
                const service = {
                    serviceName: itemTrimmed.split(' (')[0],
                    serviceStatus: itemTrimmed.split('(')[1].replace(')', '').trim()
                }

                services.push(service)

            }
        }
    })

    return services

    }

serv = nextechStatusRequest()
console.log(serv)

【问题讨论】:

标签: node.js asynchronous async-await callback


【解决方案1】:

您需要创建一个回调函数,将其作为参数传递给您的异步函数,然后在您的异步函数中调用该回调函数。见下文:

const services = []
// added my_callback argument to async function
const nextechStatusRequest = function (my_callback) {
    axios.get(statusURI).then(response => {
        const $ = cheerio.load(response.data)
        let data = $('table').text()
        data = data.replace(/(\r\n|\n|\r)/gm, "")
        data = data.split("•")
        for (const item of data) {
            if(item !== ''){
                itemTrimmed = item.trim()
                const service = {
                    serviceName: itemTrimmed.split(' (')[0],
                    serviceStatus: itemTrimmed.split('(')[1].replace(')', '').trim()
                }

                services.push(service)

            }
            // call your callback function after async activity
            my_callback(services)
        }

    })

    return services

    }

// create a function to be called after async activity is complete
function my_callback(services) {
  console.log(services)
}

// pass reference to callback function
nextechStatusRequest(my_callback)

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多