我正在尝试同时在多个API端点上检索数据,并将结果汇总以作为一个响应发送回客户端。
但是,当尝试从async.parallel
返回数据时,我得到了undefined
的结果。我认为这是因为result
代码在返回之前正在执行,但是我不确定。
我想将一组ID传递给服务器,获取其元数据,将其元数据合并到一个对象中,然后将单个对象发送回客户端。
function doSomething() {
for(let i=0; i<req.map.length; i++) {
stack[i] = (callback) => {
let data = subroute(req, res, req.map[i])
callback(null, data)
}
}
async.parallel(stack, (err, result) => {
if(err) {
// Handle error
} else {
console.log(result) // Logs undefined
res.json([result]) // Would like to send this result back to the client
}
})
}
function subroute(req, res, num) {
request({
url: 'https://example.com/api/endpoint/' + num
},
(error, response, body) => {
if(error) {
res.json({ "error": error })
} else {
let i = {
name: body.name,
age: body.age,
}
return i
}
})
}
如何在服务器上累积许多API端点响应的结果,并将其作为一个响应发送回客户端?
答案 0 :(得分:1)
更改
let data = subroute(req, res, req.map[i])
callback(null, data)
到
subroute(req, res, req.map[i], callback)
随后,更改子路由以接收回调并返回return
function subroute(req, res, num, cb) {
request({
url: 'https://example.com/api/endpoint/' + num
},
(error, response, body) => {
if(error) {
res.json({ "error": error })
cb(<whatever error you would want to pass>);
} else {
let i = {
name: body.name,
age: body.age,
}
cb(null, i);
}
})
}
通过执行let data = subroute(req, res, req.map[i])
,您将subroute
调用的结果分配给data
。注意,subroute
在函数主体中没有return
语句,因此数据将始终为undefined
。