node.js - 与 Node.js 中的回调函数混淆
问题描述
我一直在从事一些新的 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)
解决方案
您需要创建一个回调函数,将其作为参数传递给异步函数,然后在异步函数中调用回调函数。见下文:
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)
推荐阅读
- javascript - 如何在可滚动表中保持动态添加的行
- character-encoding - mpdf php库不显示英镑货币符号£
- angular - 根据Angular中的URL将活动类添加到列表项
- winapi - MFC:CMFCDropDownToolBar 除第一个按钮外的所有按钮均为空白
- javascript - Angular:如何从包含数组的多个对象中推送标签?
- javascript - 我无法更改我的获取 JSON 数据并以角度 8 动态创建表单
- python - python:情节设置xaxis类别顺序
- r - 我如何根据某些条件计算日期?
- jenkins - 在 pod 重新启动后,在 kubernetes 上运行的 Jenkins 会抛出错误
- javascript - 我想更改 dataLayer 名称,但总是有一条“消息”