我有这样的代码:
router.post('/call' , async (req , res)=>{
try{
await async.mapLimit(req.body.n , 5 , (id , callback)=> {
////do something
callback("message")
}, (err , rest)=>{
if(err){
res.json({message : err})
}else{
res.json({message : rest})
}
})
}catch(err){
res.json({message : err})
}
})
我想使“执行某些操作”这样的功能:
router.post('/call' , async (req , res)=>{
try{
await async.mapLimit(req.body.n , 5 , (id , callback)=> {
addStudentID(req , res , id , callback)
}, (err , rest)=>{
if(err){
res.json({message : err})
}else{
res.json({message : rest})
}
})
}catch(err){
res.json({message : err})
}
})
我的问题是,似乎无法将回调作为参数发送给另一个函数,有解决方案吗?
答案 0 :(得分:0)
首先,函数声明中的异步是没有用的,除非您等待promise函数(async-await函数)。但是我不知道为什么将函数作为回调传递给promise函数(异步等待函数)。
然后,假设您的async.mapLimit
是基于回调的函数。您可以将您的回调函数与promise包装在一起,然后产生async-await函数(返回promise的函数),如下所示:
function async.mapLimitPromise(firstArgument, secondArgument) {
return new Promise(function(resolve, reject) {
async.mapLimit(firstArgument, secondArgument, function(err, data) {
if (err) {
reject(err)
}
resolve(data)
})
})
还有一件事。我不明白您为什么将一个函数(您的回调)作为async.mapLimit
函数的第三个参数传递,但是随后它收到一个回调作为第二个参数?
我建议您先阅读有关回调函数的更多信息,然后再阅读Promise,最后再尝试使用异步函数
---编辑---
首先尝试使用此代码:
router.post('/call' , async (req , res)=>{
try{
const res = await async.mapLimit(req.body.n , 5 , (id , callback)=> {
addStudentID(req , res , id , callback)
})
res.json({message : rest})
}catch(err){
res.json({message : err})
}
})
答案 1 :(得分:0)
问题是函数使用和函数声明不同步而不是回调部分