这个问题看起来像是我的另一个问题:NodeJS Local variable in callback但我认为它有所不同,因为答案的解决方案在这里不起作用。
我有一个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);
})
})
答案 0 :(得分:1)
正如async official documentation中所提到的,这里的“collectionsDone”函数纯粹是循环函数内部的,所以它不能与回调中的“return”一起使用。
换句话说,“collectionsDone”只是切换到异步循环的下一次迭代的通用函数。一旦循环终止,就不需要传递它。
答案 1 :(得分:0)
我错过了回调中的密钥,所以它必须是
async.eachOfSeries(shop.collections, function(collection, key, collectionsDone){