回调不是异步 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){