zoukankan      html  css  js  c++  java
  • 使用Async同步执行异步函数

    为了适应异步编程,减少回调的嵌套,我在项目中引入了Async,当批量处理且需要同步执行一些逻辑相同的异步函数时,觉得还是Async最为靠谱。

    我有一个类似下面代码的场景,依据数组中的每一个元素执行一个异步回调函数,比如http.get。

    var http = require('http');
    var fs = require('fs');
    var args_array = [
        {name: "hao123", url: "http://www.hao123.com/index.html"},
        {name: "ifeng", url: "http://www.ifeng.com/"},
        {name: "baidu", url: "http://www.baidu.com/index.php?tn=10018801_hao"}
    ];
    
    args_array.forEach(function (element) {
        var file = fs.createWriteStream(element.name);
        http.get(element.url, function (response) {
            console.log(element.name);
            response.pipe(file);
        });
    });

    这个的代码是可以正常工作的,但是有一个问题,文件下载的顺序无法保证,我的需求是:数组中的每一个元素所执行的逻辑都依赖上一次执行的结果,下图表明了上述代码的执行的顺序。

    image

    修正后的代码,将单个执行逻辑封装成一个Function,放到一个数组中,由Async去执行这个数组,方能保证他们的顺序。

    var initFunctions = [];
    var Async = require('async');
    var http = require('http');
    var fs = require('fs');
    var args_array = [
        {name: "hao123", url: "http://www.hao123.com/index.html"},
        {name: "ifeng", url: "http://www.ifeng.com/"},
        {name: "baidu", url: "http://www.baidu.com/index.php?tn=10018801_hao"}
    ];
    args_array.forEach(function (element) {
        initFunctions.push(function (callback) {
            var file = fs.createWriteStream(element.name);
            http.get(element.url, function (response) {
                console.log(element.name);
                response.pipe(file);
                callback();
            });
        });
    });
    Async.series(initFunctions, function (error, values) {
        if (error) {
            console.log(error);
        }
        else {
            console.log("over~");
        }
    });

    image

  • 相关阅读:
    将aspx页面编译成dll
    Jquery 验证数字
    c#反编译生成DLL过程
    c#进制转换
    Spring Mvc 实例
    wamp phpMyAdmin error #1045
    Tomcat相关知识点总结(jsp)
    Java ---学习笔记(泛型)
    Java IO ---学习笔记(文件操作与随机访问文件)
    Java IO ---学习笔记(字符流)
  • 原文地址:https://www.cnblogs.com/fengxiang/p/3446302.html
Copyright © 2011-2022 走看看