Nodejs - 使用 async.forEachOf 做一个循环和 return 没有回调

Nodejs - Using async.forEachOf to do a loop and return without a callback

我没有对任何服务器进行任何调用。 我只是循环一个对象并对当前项目进行一些简单的比较。我希望能够使用 return 而不是将我的代码嵌套在回调中。根据我目前对 node.js 的理解,下面的代码应该立即执行并且 return 布尔值。

示例:

function validate() {
  var error = false;
  var items = {
    'item1': 'value1',
    'item2': 'value2'
  };
  var eachItem = function(item, key, next) {
    // do some simple comparisons
    if (item !== 'value3') {error = true;}
    next();
  };
  async.forEachOf(items, eachItem, function() {
    // I prefer not to use callback(error), error is defined here
    console.log('End Validate', error);
    return error;
  });
}
var thisError = validate();
console.log('After Validate', thisError); // thisError is undefined

以上方法无效。我在想是因为我正在使用 async.forEachOfvalidate() 总是 undefined。但是,在调试时,我注意到布尔值是在下一个代码 运行 之前定义的('End Validate' 出现,然后 'After Validate' 出现,这是正确的执行顺序)。看起来它根本就不是 returning。 有没有什么方法可以在不使用回调的情况下 return 来自我上面示例中的函数的布尔值?

我不想使用 for...in,因为我喜欢 async 引用集合中当前项目的方式,如果我不需要,我可以轻松地使用回调以防我实际上在进行异步操作。

习惯。答案很简单。我需要将 return 定义为 validate() 函数的最后一行。它不能在 async.forEachOf 方法内。

下面是一个工作示例。

function validate() {
  var error = false;
  var items = {
    'item1': 'value1',
    'item2': 'value2'
  };
  var eachItem = function(item, key, next) {
    // do some simple comparisons
    if (item !== 'value3') {error = true;}
    next();
  };
  async.forEachOf(items, eachItem, function() {
    // I prefer not to use callback(error), error is defined here
    console.log('End Validate', error);
  });
  return error;
}
var thisError = validate();
console.log('After Validate', thisError); // thisError is defined