我正在使用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);
}
});
}
}