async.js and series issue

前端 未结 1 1296
春和景丽
春和景丽 2021-01-26 10:44

Try to run fetch after connect. Fetch is faster than connect, and in console I am getting fetch error because it returns result faster than connection done. But in documentation

相关标签:
1条回答
  • 2021-01-26 11:40

    You will need to not call the callback until the connect() call completes its asynchronous work. That's the only way that the async library can do its job. Since connect() is asynchronous, it likely has a callback itself that you can use to know when it is actually done.

    Furthermore, you shouldn't need the setTimeout() calls at all if you use the async library properly.

    Conceptually, you would like something like this where the connect() function calls a passed in callback when it finishes its async operation:

    var bets = [];
    async.series([
        function(callback){
            connect(function() {
                callback(null, 'one');
            });
        },
        function(callback){
            fetch_last_30();
            callback(null, 'two');
        }
    ]);
    

    While, I'd would personally find promises a better solution here for sequencing two operations, you could change your connect() function to this:

    function connect(callback){
        var url = "https://api....../login";
        /* connect to site and get access_token to access other api*/
        $.post(
            url,
            {username: "000", password : "000"},
            function(data){
                access_token = data["access_token"];
                console.log(data["access_token"]);
                callback(data);
            }
        )
    }
    

    Here's a version using promises instead of the async library:

    function connect(callback){
        var url = "https://api....../login";
        /* connect to site and get access_token to access other api*/
        return $.post(url, {username: "000", password : "000"}).then(function(data){
           access_token = data["access_token"];
           console.log(data["access_token"]);
           return data;
        });
    }
    
    connect().then(function(data) {
        fetch_last_30();
    });
    
    0 讨论(0)
提交回复
热议问题