使用Jscex的使用问题
发布于 13 年前 作者 tank00 5945 次预览 最后一次回复是 13 年前 来自
报错是这样的: [WARNING] An unhandled error occurred: Error: callback is mandatory 不知道是不是用法有问题。
var dealAsync = eval(Jscex.compile("async", function(){
var tagArr = $await(collection.find({}).toArray());
var tasks = [];
for(x in tagArr){
tasks.push(insertTagImg(tagArr[x]));
}
$await(Jscex.Async.Task.whenAll(tasks));
}));
dealAsync().start();
其中insertTagImg是个处理函数。
12 回复
我觉得是因为你的
collection.find({}).toArray()不是一个Jscex异步操作啊。确实是我自己的问题。刚开始不知道要封装成Jscex异步操作函数。
@tank00 好说好说,有问题继续问那。
@jeffz 我在Jscex异步方法内写了代码如下:
但是实际运行的话,最后一个调用tagArr[x]._id的使用这个值始终一样。我猜测应该都是最后一个值,这应该是异步的使用使用循环变量的问题。 所以我的问题是,如果我要多次用到这个循环变量,除了第一次调用之外截下来的调用,是不是必须一层层的把这个值callback回来。否则我调用的时候永远是最后一个值
@jeffz 好像是不是这样就可以了。
@tank00 你的x为什么用在两个循环里?
@jeffz 笔误了。第二层循环用的是i。
@tank00 给一个正确的代码吧,然后把问题描述清楚。
@jeffz 这几天总结一下,写一个好一点的帖子。现在这个是问题贴。我的主要问题要串行处理6000多张图片,使用nodejs写脚本,每次处理涉及到imagemagick和数据库操作。直接for循环并行的话内存,子进程太多无法解决,必须是深度的6000多层嵌套。
@tank00 靠,就算串行处理也不用硬写6000层的嵌套啊……
@jeffz 所用jscex啊
@tank00 我是说不用Jscex也用不着这么写啊……