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.forEachOf
。 validate()
总是 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
我没有对任何服务器进行任何调用。 我只是循环一个对象并对当前项目进行一些简单的比较。我希望能够使用 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.forEachOf
。 validate()
总是 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