回调不是异步 echOfSeries 中的函数
Callback is not a function in async echOfSeries
这个问题看起来像我的另一个问题: 但我认为它是不同的,因为答案的解决方案在这里不起作用。
我有一个 async.eachOfSeries()
函数,它会循环访问商店中的某些系列。根据 属性 它将创建一个类别,或者它会尝试获取现有类别。根据该结果:将创建新类别或更新现有类别。
之后调用异步回调以进一步处理下一个集合。
但是当代码调用回调时,我收到错误 collectionsDone is not a function
。该功能是我的回调。
我已经根据上述问题的答案用 IIFE
进行了尝试,但这似乎不起作用。
我该如何解决这个问题?
async.eachOfSeries(shop.collections, function(collection, collectionsDone){
if(!collection.countrId){
//This collection doesn't seems to be synced to countr yet
createCategory(collection[language].name, access_token, function(err, category){
if(category){
collection.categoryId = category._id;
}
return collectionsDone();
})
}else{
//It looks like that this category is already synced, but maybe we should update it
var link = 'categories/' + collection.categoryId;
(function(collectionsDone){
externalService.callApi({url: link}, null, access_token, function(err, category){
console.log("err", err, "category", category);
if(err.error == "not_found"){
createCategory(collection[language].name, access_token, function(err, category){
if(category){
collection.categoryId= category._id;
}
return collectionsDone();
})
}else{
if(category.name != collection[language].name){
var data = {
_id: category._id,
name: collection[language].name,
color: category.color,
visible: category.visible
};
var url = 'categories/' + category._id;
externalService.callApi({
url: url,
method: "PATCH"
}, data, access_token, function(err, category){
return collectionsDone();
})
}else{
return collectionsDone();
}
}
})
})(collectionsDone);
}
}, function(){
//collectionsDone()
shop.save(function(err, result){
console.log("shop save", err, result);
if(err){
return callback({code: 500, msg: err});
}
return callback(null, result);
})
})
在async official documentation中提到,这里的"collectionsDone"函数是纯内部循环函数,所以在回调中不能与"return"一起使用。
换句话说,"collectionsDone"只是一个通用函数,用于切换到异步循环的下一次迭代。一旦循环终止就不需要传递它。
我在回调中遗漏了关键,所以它必须是
async.eachOfSeries(shop.collections, function(collection, key, collectionsDone){
这个问题看起来像我的另一个问题:
我有一个 async.eachOfSeries()
函数,它会循环访问商店中的某些系列。根据 属性 它将创建一个类别,或者它会尝试获取现有类别。根据该结果:将创建新类别或更新现有类别。
之后调用异步回调以进一步处理下一个集合。
但是当代码调用回调时,我收到错误 collectionsDone is not a function
。该功能是我的回调。
我已经根据上述问题的答案用 IIFE
进行了尝试,但这似乎不起作用。
我该如何解决这个问题?
async.eachOfSeries(shop.collections, function(collection, collectionsDone){
if(!collection.countrId){
//This collection doesn't seems to be synced to countr yet
createCategory(collection[language].name, access_token, function(err, category){
if(category){
collection.categoryId = category._id;
}
return collectionsDone();
})
}else{
//It looks like that this category is already synced, but maybe we should update it
var link = 'categories/' + collection.categoryId;
(function(collectionsDone){
externalService.callApi({url: link}, null, access_token, function(err, category){
console.log("err", err, "category", category);
if(err.error == "not_found"){
createCategory(collection[language].name, access_token, function(err, category){
if(category){
collection.categoryId= category._id;
}
return collectionsDone();
})
}else{
if(category.name != collection[language].name){
var data = {
_id: category._id,
name: collection[language].name,
color: category.color,
visible: category.visible
};
var url = 'categories/' + category._id;
externalService.callApi({
url: url,
method: "PATCH"
}, data, access_token, function(err, category){
return collectionsDone();
})
}else{
return collectionsDone();
}
}
})
})(collectionsDone);
}
}, function(){
//collectionsDone()
shop.save(function(err, result){
console.log("shop save", err, result);
if(err){
return callback({code: 500, msg: err});
}
return callback(null, result);
})
})
在async official documentation中提到,这里的"collectionsDone"函数是纯内部循环函数,所以在回调中不能与"return"一起使用。
换句话说,"collectionsDone"只是一个通用函数,用于切换到异步循环的下一次迭代。一旦循环终止就不需要传递它。
我在回调中遗漏了关键,所以它必须是
async.eachOfSeries(shop.collections, function(collection, key, collectionsDone){