【问题标题】:javascript remove functions in async.paralleljavascript 删除 async.parallel 中的函数
【发布时间】:2025-12-31 15:20:20
【问题描述】:

这个问题可能看起来很简单,但我在 javascript 方面的经验为 0,并且对回调函数感到困惑。

原始代码是用“async.parallel”做一些“async.each”。

function fillMap(listElements, elementMap, params, callBack) {
    async.each(listElements, function findElement(listElement, forEachCallBack) {
        async.parallel(
            {
                fun1: function getUniqueElement(parallelCallBack) {
                    params.getResponse1(parallelCallBack);
                },
                fun2: function getElement(parallelCallBack) {
                    params.getResponse2(parallelCallBack);
                }

            },
            function fillElement(err, res) {
                if (err) {
                    return forEachCallBack(err);
                }
                elementMap[listElement] = res.body;
                forEachCallBack();
            });
    }, callBack);
}

现在我不需要 async.parallel 中的第一个函数,我只需要“getElement”而不是“getUniqueElement”。我应该如何从 async.parallel 主体中删除它?而且我不需要“async.parallel”,但我不知道如何调用带有“fillElement”的“getElement”仍会收到响应正文..

有什么建议吗?

谢谢!

【问题讨论】:

标签: javascript function async.js asynccallback


【解决方案1】:

从 async.parallel 中移除 getUniqueElement

function fillMap(listElements, elementMap, params, callBack) {
    async.each(listElements, function findElement(listElement, forEachCallBack) {
        async.parallel(
            {
                fun2: function getElement(parallelCallBack) {
                    params.getResponse2(parallelCallBack);
                }
            },
            function fillElement(err, res) {
                if (err) {
                    return forEachCallBack(err);
                }
                elementMap[listElement] = res.body;
                forEachCallBack();
            });
    }, cb);
}

删除整个 async.parallel 块

function fillMap(listElements, elementMap, params, callBack) {
    async.each(listElements, function findElement(listElement, forEachCallBack) {
        var fillElement = function (err, res) {
            if (err) {
                return forEachCallBack(err);
            }
            elementMap[listElement] = res.body;
            forEachCallBack();
        }

        var getElement = function (callback) {
            params.getResponse2(callback);
        };

        getElement(fillElement);

    }, callBack);
}

尝试通过apihttps://github.com/caolan/async 如有任何疑问,请随时提问。

【讨论】:

  • 你能拿到还是需要帮助
  • 嗨,感谢您的建议。但是我在处理一些测试用例时遇到了 typeError: "undefined is not a function" ..
  • 你用的是哪一个,没有并行?你能提供更多关于错误的细节吗
  • "在 processImmediate [as _immediateCallback] (timers.js:345:15)" 还有
  • 同样在“var getElement=function(callback)”和“cb”中我弄错了,“cb”应该是函数“fillMap”中的“callBack”。