当前位置: 首页 > 知识库问答 >
问题:

如何使Javascript setTimeout在函数中返回值

阎淮晨
2023-03-14

我有一个函数,它调用一些服务并返回响应。如果响应为FALSE,它将等待1秒再次询问服务(然后可能返回TRUE)。

如何调用我的函数“checkService()”一次,并获得真正的值?(第一次或第二次尝试,由函数决定)我在函数内设置了RET值,但函数总是返回第一次RET,因为setTimeout是异步的。

换句话说,我需要一些“睡眠”技巧,或者任何解决方案(也可能是jQuery)。

function checkService() {

  //this may return TRUE or FALSE
  var RET = someServiceResponse(); 

  // here waits 1 second, then ask the service again
  if( RET == true ) {
    return true;
  } else {

    setTimeout(
        function() {
            //it must return the second response of the service
            RET = someServiceResponse();  
        }, 
        1000
    );

    // I want the checkService() return the response after de timeout
    return RET;  
  }
}

function alertResponse() {
    alert( checkService() );
}

共有2个答案

楚浩然
2023-03-14

谷歌搜索“javascript setTimeout callback”,这里有一个方便的jsFiddle,大约有3个结果:

getData('http://fakedomain1234.com/userlist', writeData);

document.getElementById('output').innerHTML += "show this before data ...";

function getData(dataURI, callback) {
    // Normally you would actually connect to a server here.
    // We're just going to simulate a 3-second delay.
    var timer = setTimeout(function () {
        var dataArray = [123, 456, 789, 012, 345, 678];
        callback(dataArray);
    }, 3000);
}

function writeData(myData) {
    console.log(myData);
}

http://jsfiddle.net/cwbuecheler/Y9Ca8/

轩辕欣可
2023-03-14

当您期望服务提供结果时,应该使用回调函数。

这样地:

function checkService(callback) {

    //this may return TRUE or FALSE
    var RET = someServiceResponse();

    // here waits 1 second, then ask the service again
    if( RET == true ) {
        callback(RET);
    } else {

        setTimeout(
                function() {
                    //it must return the second response of the service
                    RET = someServiceResponse();
                    callback(RET);
                },
                1000
        );

        // I want the checkService() return the response after de timeout
        return RET;
    }
}

所以当你想要呼叫服务时,你只需要做:

checkService(function(status){
    alert(status);

    // Here some code after the webservice response
});
 类似资料:
  • 问题内容: 我怎样才能返回一个 函数 副作用的词汇封闭 1 斯卡拉? 例如,我在Go中查看此代码示例: 打印1 2 3 5 8 而且我不知道如何在Scala中编写相同的内容。 1.在Apocalisp评论后更正 问题答案: 稍短一些,您不需要退货。

  • 我的Go函数预计会返回一个值,但在调用库函数时可能会出现恐慌。我可以使用在延迟调用中捕获它,但是在这种情况下如何返回值呢?

  • 我想用C++做一个简单的函数来练习一下。它应该做与python中的range()函数相同的事情,但现在要简单得多。我遇到了一个问题,数组没有正确地从函数返回到主函数。我曾经在下面编码,得到了一个奇怪的错误。有人知道问题出在哪里吗?

  • 问题内容: 我的Go函数应该返回一个值,但是在调用库函数时可能会出现紧急情况。我可以在延迟调用中捕获它,但是在这种情况下如何返回一个值? 问题答案: 您可以使用命名结果参数。命名您的返回值,并在检测到紧急情况时在延迟函数中更改返回“变量”的值。更改后的新值将被返回。 例: 输出(在Go Playground上尝试): Spec:Defer语句中 提到了这一点: 例如,如果延迟函数是函数文字,并且周

  • 问题内容: 嗨,我有一个PHP代码返回一个数组。我希望能够在我的ajax成功函数中使用此数组,但是我不确定如何执行此操作。我尝试了以下方法,但是没有运气。 php代码: js代码: 问题答案: 您应该从服务器以JSON形式返回数据。 的PHP JS

  • 我正在尝试从函数返回布尔值。 错误:布尔文字不符合预期的类型单位。 我知道unit是kotlin中的默认返回类型。我将如何将其更改为布尔值。