arrays - 可以循环通过“太快”的函数破坏它(Node.js)
问题描述
我正在尝试在服务器上累积 API 响应并将它们作为单个对象返回给客户端。为此,我循环遍历数组中的项目并将响应映射回原始对象。这适用于长度为 1 的数组,但在循环较大数组时会记录空白。
循环遍历数组时,Node 是否会创建函数的新实例,还是会继续将数据传递给同一个函数,即使它还没有返回值?
loopThroughArray(req, res) {
for(let i=0; i<req.map.length; i++) {
stack[i] = (callback) => {
let data = getApi(req, res, req.map[i], callback)
}
}
async.parallel(stack, (result) => {
res.json(result)
})
}
……
function getApi(req, res, num, cb) {
request({
url: 'https://example.com/api/' + num
},
(error, response, body) => {
if(error) {
// Log error
} else {
let i = {
name: JSON.parse(body)['name'],
age: '100'
}
console.log(body) // Returns empty value array.length > 1 (req.map[i])
cb(i)
}
})
如果 Node 正在重载该函数,我如何确保在再次运行该函数之前已接收到数据?
解决方案
api 调用是异步的。
运行循环时,代码会在不等待答案的情况下进行多次休息调用。
如果循环不是太大,那么您可以使用递归来同步调用。
您还可以使用灵活的方式同步调用:
推荐阅读
- laravel - Laravel 每次刷新时的新会话和提交登录表单时的 419
- grafana - Grafana 数据按小时显示
- python - 使用python修改文件路径中的日期
- javascript - 不和谐.js | guild.iconURL 在嵌入中不起作用
- powershell - PowerShell cmdlet Get-AdfsProperties 不包含 EnableIdpInitiatedSignonpage 属性
- javascript - How to replace Link component behavior with History in React-Router
- swiftui - 迅速。使用 UIApplication.shared 时出错
- python - 从 GUI 中提取数据并打印/发送到 SQL
- linux - 在某个特定字符后剪切一个字符串,但只剪切一个字段
- python - 如何过滤 Pandas 数据框中包含的 spaCy 标记化文本的停用词