Async.js“回调已被调用”;无法调试

时间:2019-10-23 01:00:00

标签: javascript node.js async.js

我正在使用async.js来帮助进行数据导入的验证和转换。将一段代码移至其自己的函数后,出现错误“回调已被调用”。来自async.js。堆栈跟踪没有有关调试的有用信息。当我直接调用它时,确切的代码可以正常工作。我需要在多个导入中使用它,所以这就是为什么我将对象移到包含其他“变形金刚”的对象的原因。它们都工作正常。

我尝试将以下代码插入到函数中进行调试:

$str = '128T_2+167T_2+113T_8+115T_8';

echo convertProductSku($str);

function convertProductSku($str) {
  $arr = [];
  $parts = explode('+', $str);

  foreach ($parts as $part) {
    list($first, $second) = array_pad(explode('_', $part), 2, null);
    $letter = substr($first, -1);
    $number = substr($first, 0, -1);

    $arr[] = $letter . $number . ($second ? '_' . $second : '');
  }

  return implode('+', $arr);
}

如果我将其添加到函数的第一行,它将运行正常并向浏览器返回错误“ test”。将其插入其他任何地方都会导致错误。

以下作品。如果我在let query = ...之后将“ return cb(“ error);”移至行,它将因回调错误而失败。我非常困惑。

return cb("test);

变量“ cb”是通过异步调用传递的:

user(options = {
        select: "id",
        return: "id",
        lean: true,
    }) {
        return (value, cb) => {
            if (!value) {
                return cb(null, null);
            }

            return cb("test");

            let query = User.findOne({
                $or: [{
                        email: value.toLowerCase()
                    },
                    {
                        username: value
                    },
                ]
            }).select(options.select);

            if (options.lean) {
                query.lean();
            }

            query.exec((error, user) => {
                if (error) {
                    return cb(error);
                }

                if (!user) {
                    return cb(`user not found: ${value}`);
                }

                if (options.return == "object") {
                    cb(null, user);
                } else {
                    cb(null, user._id);
                }
            });
        }
    }

0 个答案:

没有答案