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

node.js async.series是应该如何工作的?

全流觞
2023-03-14
问题内容
var async = require('async');

function callbackhandler(err, results) {
    console.log('It came back with this ' + results);
}

function takes5Seconds(callback) {
    console.log('Starting 5 second task');
    setTimeout( function() { 
        console.log('Just finshed 5 seconds');
        callback(null, 'five');
    }, 5000);
}

function takes2Seconds(callback) {
    console.log('Starting 2 second task');
    setTimeout( function() { 
        console.log('Just finshed 2 seconds');
        callback(null, 'two');
    }, 2000); 
}

async.series([takes2Seconds(callbackhandler), 
              takes5Seconds(callbackhandler)], function(err, results){
    console.log('Result of the whole run is ' + results);
})

输出如下:

Starting 2 second task
Starting 5 second task
Just finshed 2 seconds
It came back with this two
Just finshed 5 seconds
It came back with this five

我原以为takes2Second函数会在takes5Second开始之前完全完成。那是应该如何工作的。请告诉我。最后的功能永远不会运行。谢谢。


问题答案:

不完全的。您正在立即执行这些功能(对数组求值后立即执行),这就是它们似乎同时启动的原因。

传递给要执行的每个函数的回调在异步库内部。您可以在函数完成后执行它,并传递错误和/或值来执行它。您无需自己定义该功能。

最终函数永远不会在您的情况下运行,因为异步需要您调用的回调函数才能继续执行该系列中的下一个函数(实际上不会callbackHandler执行)。

尝试以下方法:

async.series([
    takes2Seconds,
    takes5seconds
], function (err, results) {
    // Here, results is an array of the value from each function
    console.log(results); // outputs: ['two', 'five']
});


 类似资料:
  • 问题内容: 我正在使用 shouldChangeCharactersInRange 作为使用即时类型搜索的方式。 但是我有一个问题,在文本字段实际更新之前 应该 调用 shouldChangeCharactersInRange : 在目标C中,我使用以下方法解决了这个问题: 但是,我尝试用Swift编写此代码: 在获得值之前,该方法仍会被调用? 问题答案: 雨燕4,雨燕5 此方法不使用 注意。使用

  • 问题内容: 我一直在挣扎着我的第一个正则表达式。在编译,并不断得到错误。 我只是更改为,它的工作就像一个梦。 我的印象是,荷兰国际集团将 同时 在带来等等那是不是这样的?我找不到解决此特定问题的任何文档。 问题答案: 是的,这就是Java中包导入的工作方式(应该如此)。例如,doing 将导入所有 类 ,但 不 导入子包及其类。 人机工程学,将 不会 导入或 阅读以下博客,获得一些友好的新手建议。

  • 问题内容: 鉴于以下HTML和CSS,我在浏览器中看不到任何东西(撰写本文时,Chrome和IE最新)。一切都崩溃为0x0像素。为什么? 问题答案: CSS表模型基于HTML表模型 一个表分为ROWS,并且每一行包含一个或多个单元格。单元格是ROWS的子级,它们是列的子级。 “ display:table-column”不提供用于制作列式布局的机制(例如,具有多列的报纸页面,其中内容可以从一列流向

  • 在底部将此选项设置为true vs false时,它们将列出结果的差异 在我的EMR配置(在presto-config中)中包含设置为之后,我仍然会根据这个测试查询获得新的结果(并且我的UTC时间戳仍然会自动转换)。 对于启用遗留时间戳行为还需要做些什么有什么建议吗?

  • 问题内容: 我在尝试使用timestamp2代替SQL Server 2008中的Timestamp时遇到了一些麻烦。显然,rs.getTimestamp在timestamp和timestamp2之间的行为非常不同。但是,我找不到任何文档说明应该有所不同,或者我应该使用其他有所不同的文档。我想知道我是否做错了什么。 环境: 在SQL Express 2008(10.0)和SQL Server 20

  • 问题内容: 简而言之,我正在实现一个图形,现在正在研究Kruskal,我需要一个优先级队列。我对优先级队列的定义是,具有最小密钥的元素将排在最前面?错了吗 因为当我在队列中插入加权边(或数字)时,它们不会最终排序。 那会打印出来;[1、54、51、102、99、55]。这不是我希望他们成为的那样!是的,我制作了一个进入优先级队列的编译器,该队列从边缘对象中提取数字并根据该int进行比较。因此,这应