异步类型错误: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 
} 
+0

我看到发生了什么,我用.exec而不是函数()(即回调)调用它......感谢你的回答让我以正确的方式! – galgo