我有类似的代码
common.findOne('list', {'listId': parseInt(request.params. istId)}, function(err, result){
if(err) {
console.log(err);
}
else {
var tArr = new Array();
if(result.tasks) {
var tasks = result.tasks;
for(var i in tasks) {
console.log(tasks[i]);
common.findOne('tasks', {'taskId':parseInt(tasks[i])}, function(err,res){
tArr[i] = res;
console.log(res);
});
}
console.log(tArr);
}
return response.send(result);
}
});
它没有在node.js中按顺序执行,因此在执行结束时得到一个空数组。问题是它将先执行console.log(tArr);
然后执行
common.findOne('tasks',{'taskId':parseInt(tasks[i])},function(err,res){
tArr[i] = res;
console.log(res);
});
我的代码中是否有任何错误或执行此操作的任何其他方式?谢谢!
您可能已经知道,事情在node.js中异步运行。因此,当您需要使事物按特定顺序运行时,您需要利用控件库或基本上自己实现。
我强烈建议您看一下async,因为它可以轻松地使您执行以下操作:
var async = require('async');
// ..
if(result.tasks) {
async.forEach(result.tasks, processEachTask, afterAllTasks);
function processEachTask(task, callback) {
console.log(task);
common.findOne('tasks', {'taskId':parseInt(task)}, function(err,res) {
tArr.push(res); // NOTE: Assuming order does not matter here
console.log(res);
callback(err);
});
}
function afterAllTasks(err) {
console.log(tArr);
}
}
在这里看到的主要内容是,每个任务并行调用了processEachTask,因此不能保证顺序。要标记任务已处理,您将从中调用callback
匿名函数findOne
。这使您可以进行更多的异步工作,processEachTask
但仍然可以表示何时完成。完成所有任务后,它将调用afterAllTasks
。
看一看异步,看看它提供的所有辅助功能,这非常有用!
问题内容: 我想连续执行多个命令: 即(只是为了说明我的需要): (贝壳) 然后 和 并读取的结果。 对模块有任何想法吗? 更新: 而只是一个例子。我需要运行复杂的命令(遵循特定的顺序,没有任何流水线操作)。实际上,我想要一个子进程外壳,并希望能够在其上启动许多命令。 问题答案: 有一种简单的方法可以执行一系列命令。 在以下使用 或者,如果您陷在Windows中,则有多种选择。 创建一个临时的“
问题内容: 我试图理解这段代码,不确定为什么第二遍在第一遍之前执行。如果有人真的可以帮助我,那就太好了! 输出: 问题答案: 您没有任何内容可以显式同步两个goroutine的顺序。如果运行足够的时间,您将看到调用以不同的顺序进行打印。当执行goroutine时,由于它们是并发操作,因此无法保证它们将何时执行和/或完成。您需要使用各种标准库程序包或通道本身来同步并发运行的goroutine的执行。
Hprose 中间件的顺序执行是按照添加的前后顺序执行的,假设添加的中间件处理器分别为:handler1, handler2 … handlerN,那幺执行顺序就是 handler1, handler2 … handlerN。 不同类型的 Hprose 中间件和 Hprose 其它过程的执行流程如下图所示: +--------------------------------------------
本文向大家介绍Unity3D中脚本的执行顺序和编译顺序,包括了Unity3D中脚本的执行顺序和编译顺序的使用技巧和注意事项,需要的朋友参考一下 事件函数的执行顺序 先说一下执行顺序吧。 官方给出的脚本中事件函数的执行顺序如下图: 我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对应的游戏对象上:
类D 主要方法是 Bean配置文件是 程序的输出为:
我正在比较算法(前n个数之和)的顺序和并行性能(使用ForkJoinPool): 我试着用不同的NumLoop来获得不同的值,但顺序法总是表现得更好,而且也是按3-4的顺序。 考虑到阵列大小并不是那么小,并行版本在这里的性能不应该更好吗。