javascript – Async – parallel()与函数动态数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Async – parallel()与函数动态数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1326字,纯文字阅读大概需要2分钟。
内容图文
我正在使用nodejs的优秀caolan“async”模块:
我有这个代码:
exports.manageComments = function(req, res) {
var toDeleteIds = [];
var deleteFunctions = [];
if (req.body.doDelete) {
toDeleteIds = req.body.doDelete;
}
var i;
for ( i = 0; i < toDeleteIds.length; i++ ) {
var deleteFunction = function(callback) {
var id = toDeleteIds[i];
console.log(id);
Comment.findOne({_id:id}, function(err, found) {
if (!err) found.remove(callback);
});
}
deleteFunctions.push(deleteFunction);
}
async.parallel(
deleteFunctions,
function(err,results) {
exports.comments(req, res); //render a view
}
);
};
我的数组包含两个元素,但console.log()一直告诉我“未定义”.
我错过了什么?
解决方法:
你的问题是:
var deleteFunction = function(callback) {
var id = toDeleteIds[i];
因为在执行每个回调函数时,我将具有与toDeleteIds.length相同的值.闭包不会“捕获”外部变量在创建时所具有的值;它“捕获”对外部变量在执行时所具有的任何值的引用(在这种情况下,直到你的for循环完成之后才会这样).
为了在创建回调函数时“捕获”i的值,您需要使i成为您调用以创建回调函数的函数的参数.你需要类似的东西
var deleteFunction = makeDeleteFunction(i, callback);
然后在回调之外创建一个单独的函数:
function makeDeleteFunction(i, callback) {
return function(callback) {
var id = toDeleteIds[i];
console.log(id);
Comment.findOne({_id:id}, function(err, found){
if (!err) found.remove(callback);
});
};
}
内容总结
以上是互联网集市为您收集整理的javascript – Async – parallel()与函数动态数组全部内容,希望文章能够帮你解决javascript – Async – parallel()与函数动态数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。