async TypeError:cb不是函数

时间:2017-04-07 18:46:31

标签: javascript node.js asynchronous

我已经创建了以下方法来帮助我找到一个项目并更新具有特定值的另一个对象属性,如下所示:

  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不是函数

在上一个cb(e, result);。我不得不承认我有点脑死了,答案一定很简单。

谢谢!

1 个答案:

答案 0 :(得分:2)

无法保证cb将成为一种功能。有人可以传递任何他们想要的东西或者根本不传递任何东西(在这种情况下cb将是undefined)。

如果您认为调用此函数的代码是cb保证是函数的代码,则可以在assert(typeof cb === 'function');的开头添加mergeAinBbyAttr。 (您可能需要在文件顶部添加const assert = require('assert');。)

如果这是其他人可以调用的库代码,或者如果您不能保证收到cb的函数,请添加一些类型检查:

if (typeof cb !== 'function') {
  // Do something here: Throw an error, set `cb` to a no-op function, whatever
}