Nodejs Async的简化版 实现异步任务的并行或顺序执行

Nodejs Async的简化版 实现异步任务的并行或顺序执行

Async 各种函数的使用 demo: https://github.com/alsotang/async_demo

4 回复

Node.js Async的简化版 实现异步任务的并行或顺序执行

在Node.js中,处理异步操作是一个常见的需求。async库提供了一些方便的工具来管理异步任务的并行或顺序执行。本文将通过一个简单的例子来展示如何使用async库来实现这些功能。

安装 async

首先,你需要安装async库。你可以使用npm来安装:

npm install async

并行执行异步任务

假设我们有多个异步任务需要并行执行,并且我们需要等待所有任务完成后再进行下一步操作。我们可以使用async.parallel来实现这一点。

const async = require('async');

// 定义一些异步任务
const tasks = [
    function(callback) {
        setTimeout(() => {
            console.log('Task 1 completed');
            callback(null, 'Result from Task 1');
        }, 2000);
    },
    function(callback) {
        setTimeout(() => {
            console.log('Task 2 completed');
            callback(null, 'Result from Task 2');
        }, 1000);
    }
];

// 使用 async.parallel 执行任务
async.parallel(tasks, (err, results) => {
    if (err) throw err;
    console.log('All tasks completed:', results);
});

在这个例子中,我们定义了两个异步任务,并使用setTimeout模拟异步操作。async.parallel会并行执行这两个任务,并在所有任务完成后调用回调函数,输出结果。

顺序执行异步任务

如果我们希望按顺序执行这些任务,并且前一个任务的结果可以传递给下一个任务,我们可以使用async.waterfall

const async = require('async');

// 定义一些异步任务
const tasks = [
    function(callback) {
        setTimeout(() => {
            console.log('Task 1 completed');
            callback(null, 'Result from Task 1', 'Extra data');
        }, 2000);
    },
    function(resultFromTask1, extraData, callback) {
        setTimeout(() => {
            console.log('Task 2 completed with data:', resultFromTask1, extraData);
            callback(null, 'Result from Task 2');
        }, 1000);
    }
];

// 使用 async.waterfall 执行任务
async.waterfall(tasks, (err, result) => {
    if (err) throw err;
    console.log('Final result:', result);
});

在这个例子中,async.waterfall会依次执行每个任务,并将前一个任务的结果传递给下一个任务。最终的结果会在最后一个任务完成后输出。

总结

通过使用async库中的parallelwaterfall方法,我们可以轻松地管理异步任务的并行或顺序执行。这使得编写复杂的异步逻辑变得更加简单和直观。


Async series 任务顺序执行 如果下一个任务需要上一个任务的结果是怎么实现的?我的办法是在callback的基础上在加一个results,但是这样做就存在一个问题,客户如果更改results,就有可能会影响到其他任务。这个问题只能跟每个调用的客户做个约定,不允许更改results。

.waterflow or .auto

要实现Node.js中异步任务的并行或顺序执行,可以使用async库中的相关函数。以下是简化版的示例代码,展示如何使用async库来处理异步任务。

首先,你需要安装async库:

npm install async

并行执行

假设我们有两个异步任务,希望它们同时执行,可以使用async.parallel

const async = require('async');

function task1(callback) {
    setTimeout(() => {
        console.log('Task 1 completed');
        callback(null, 'Result from Task 1');
    }, 1000);
}

function task2(callback) {
    setTimeout(() => {
        console.log('Task 2 completed');
        callback(null, 'Result from Task 2');
    }, 500);
}

async.parallel([
    task1,
    task2
], (err, results) => {
    if (err) throw err;
    console.log('All tasks completed:', results);
});

顺序执行

如果希望异步任务按顺序执行,可以使用async.series

const async = require('async');

function task1(callback) {
    setTimeout(() => {
        console.log('Task 1 completed');
        callback(null, 'Result from Task 1');
    }, 1000);
}

function task2(callback) {
    setTimeout(() => {
        console.log('Task 2 completed');
        callback(null, 'Result from Task 2');
    }, 500);
}

async.series([
    task1,
    task2
], (err, results) => {
    if (err) throw err;
    console.log('All tasks completed in sequence:', results);
});

解释

  • async.parallel:当所有任务都完成后,回调函数会被调用,并传递一个结果数组。
  • async.series:每个任务都会在前一个任务完成后才开始执行。

这些方法非常适合处理异步任务,无论是在并行还是顺序的情况下都能很好地工作。通过这种方式,你可以更好地控制异步操作的流程。

回到顶部