首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async.js与系列发行

async.js与系列发行
EN

Stack Overflow用户
提问于 2015-04-05 06:32:56
回答 1查看 144关注 0票数 0

试着在连接后运行fetch。Fetch比connect更快,而在控制台中我得到了fetch错误,因为它返回的结果比连接完成的要快。但在异步系列文档中是一个运行第二个函数的工具,先返回result.Settimeouts保存情况,但它不美观。在没有承诺的情况下,我怎么能等待?

代码语言:javascript
复制
var bets = [];
async.series([
    function(callback){
        setTimeout(function(){
            connect();
            callback(null, 'one');
        },1)
    },
    function(callback){
        setTimeout(function(){
            fetch_last_30();
            callback(null, 'two');
        },2000)
    }
]);

UPD我的连接功能

代码语言:javascript
复制
function connect(){
    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"]);
        }
    )
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-05 06:43:21

connect()调用完成异步工作之前,不需要调用回调。这是异步库完成其工作的唯一方法。因为connect()是异步的,所以它可能有一个回调本身,您可以使用它来知道何时实际完成。

此外,如果正确使用异步库,则根本不需要setTimeout()调用。

从概念上讲,您希望类似于这样的内容:connect()函数在完成异步操作时调用传入回调:

代码语言:javascript
复制
var bets = [];
async.series([
    function(callback){
        connect(function() {
            callback(null, 'one');
        });
    },
    function(callback){
        fetch_last_30();
        callback(null, 'two');
    }
]);

虽然我个人会在这里找到一个更好的解决方案,用于排序两个操作,但您可以将connect()函数更改为:

代码语言:javascript
复制
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);
        }
    )
}

下面是一个使用承诺而不是异步库的版本:

代码语言:javascript
复制
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();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29454785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档