在 node.js 的函数中使用回调
using callback in a function in node.js
我有这样的代码:
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})
}
})
我想让 "do something part" 成为这样的函数:
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})
}
})
我的问题是回调似乎不能作为参数发送给另一个函数,有什么解决方案吗?
首先,函数声明中的 async 是没有用的,除非你等待 promise 函数(async-await function)。但是我不知道为什么你将一个函数作为回调传递给一个 promise 函数(async-await 函数)。
然后,假设您的 async.mapLimit
是基于回调的函数。您可以用 promise 包装回调函数,然后生成异步等待函数(return 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})
}
})
问题是函数使用和函数声明不同步而不是回调部分的问题
我有这样的代码:
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})
}
})
我想让 "do something part" 成为这样的函数:
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})
}
})
我的问题是回调似乎不能作为参数发送给另一个函数,有什么解决方案吗?
首先,函数声明中的 async 是没有用的,除非你等待 promise 函数(async-await function)。但是我不知道为什么你将一个函数作为回调传递给一个 promise 函数(async-await 函数)。
然后,假设您的 async.mapLimit
是基于回调的函数。您可以用 promise 包装回调函数,然后生成异步等待函数(return 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})
}
})
问题是函数使用和函数声明不同步而不是回调部分的问题