异步类型错误:CB是不是一个函数
问题描述:
我创建了下面的方法来帮助我找到一个项目,并更新这样的具有一定价值的另一个对象属性:异步类型错误:CB是不是一个函数
mergeAinBbyAttr: function(a, b, attr, val, cb) {
async.forEach(a, function(itemA, cb) {
async.forEach(b, function(itemB, cb) {
if (itemA[attr] == itemB[attr]) {
itemB[val] = itemA[val];
}
cb(null, itemB);
},
function(e, result) {
cb(e, result);
});
},
function(e, result) {
cb(e, result);
});
}
的问题是,我得到:
TypeError: cb is not a function
在最后cb(e, result);
。我不得不承认我有点脑残,答案肯定是简单的。
谢谢!
答
不能保证cb
是一个函数。有人可以通过他们想要的或者什么都不通过(在这种情况下,cb
将是undefined
)。
如果您认为您调用此函数的代码是cb
保证是一个函数,那么可以在mergeAinBbyAttr
的开头添加一个assert(typeof cb === 'function');
。 (您可能需要在你的文件的顶部添加const assert = require('assert');
。)
如果这是库代码,别人也可以打电话或者如果你,否则不能保证接收功能cb
,添加一些类型检查:
if (typeof cb !== 'function') {
// Do something here: Throw an error, set `cb` to a no-op function, whatever
}
我看到发生了什么,我用.exec而不是函数()(即回调)调用它......感谢你的回答让我以正确的方式! – galgo