使用Watson的音调分析器时如何延长超时

时间:2017-01-01 10:56:33

标签: javascript node.js promise ibm-watson

在我正在进行的项目中,我试图通过Watson的音调分析器分析500个文本块。问题是,当我运行并行500 http呼叫时,服务超时。以下是给我问题的代码:

function analyzeManyPosts(posts){

    var qPromise = q.defer();

    const count = posts.length;

    var promList = posts.map(function(post){
        // analyzeSinglePost is another function I wrote that returns a promise 
        // that works as intended
        return analyzeSinglePost(post); 
    });

    //Return a collection of all promises
    return q.all(promList);
}

当我调用上面的函数时,我得到一个读取Error: connect ETIMEDOUT

的超时错误

我的两个选择是

  • 增加超时,或
  • 确保我在呼叫n-1解决后只运行呼叫n。

我正在寻找一种方法来做第一个选项,然后默认为第二个选项。

谢谢!

1 个答案:

答案 0 :(得分:0)

我最终使用throat来限制并发呼叫,以便没有一个呼叫超时。我通过以下方式做到了:

function analyzeManyPosts(posts){

    var qPromise = q.defer();

    const count = posts.length;

    //Limit to 50 calls at a time
    var promList = posts.map(throat(function(post, i){
        console.log(i);
        return analyzeSinglePost(post);
    }, 50));

    //Return a collection of all promises
    return q.all(promList);
}

这种方式一次只能进行50次呼叫,避免在同时进行所有500次呼叫时超时。