Node.js-使用async.forEachOf进行循环并返回而没有回调

时间:2019-05-20 20:47:02

标签: node.js async.js

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

示例:

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”,这是正确的执行顺序)。看起来根本就没有回来。 在我上面的示例中,有没有方法可以从函数中返回布尔值而无需使用回调?

我不想使用for...in,因为我喜欢async引用集合中当前项目的方式,并且如果不需要,我可以轻松地通过回调来更改代码情况下我实际上正在执行异步操作。

1 个答案:

答案 0 :(得分:0)

习惯。答案很简单。我需要将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