【问题标题】:Javascript function callback dependant on timeoutJavascript函数回调依赖于超时
【发布时间】:2015-06-19 14:13:15
【问题描述】:

我有一个 javascript 函数,它向 Web 服务发出请求并操纵响应。

我想在函数中设置一个超时,因为 Web 服务有时会不稳定。

在下面的示例中,我有两个超时,第二个将被对 Web 服务的请求所取代。但是在下面的示例中,回调仍然运行两次。我是否以正确的方式进行此操作,如何在返回错误回调后让函数停止。

function fnWithTimeoutCallback(v1, v2, callback) {

    // set a timeout after 3 seconds

    setTimeout(function(){

        var err = true;

        var res = {};
        res.status = 'error';
        res.message = 'Request timed out.';

        return callback(err, res);

    }, 3000);

    // meanwhile do a bunch of stuff which makes requests to web services etc

    setTimeout(function(){

        var err = false;

        var res = {};
        res.status = 'success';
        res.message = 'Did stuff with web service.';

        return callback(err, res);

    }, 6000);

}


fnWithTimeoutCallback('v1', 'v2', function(err, res) {

    if(err) { 
        console.log('There was an error: ' + res.message);
    } else {
        console.log('Worked!' + res.message);
    }

});

【问题讨论】:

  • 您使用什么库来进行 Web 服务调用?您正在使用的库可能已经有一个超时设置,您可以使用它而不是尝试明确地这样做。
  • 不幸的是,这是一段遗留的代码,我想尽可能避免接触!

标签: javascript function callback timeout


【解决方案1】:

您可以使用 clearTimeout 函数清除超时,您需要将 setTimeout 保存到变量中并根据需要清除。

var timeout1 = setTimeout (function(){
//check and clear timeout2
  clearTimeout(timeout2);
},6000);

var timeout2 = setTimeout (function(){
//check and clear timeout1
clearTimeout(timeout1);
},6000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2023-03-21
    • 2011-01-05
    • 2010-11-07
    • 2015-03-16
    • 2019-12-25
    相关资源
    最近更新 更多