当前位置: 首页 > 面试题库 >

在node.js中顺序执行

孟修竹
2023-03-14
问题内容

我有类似的代码

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的顺序。 考虑到阵列大小并不是那么小,并行版本在这里的性能不应该更好吗。