Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript设置超时+回调_Javascript_Callback_Settimeout - Fatal编程技术网

Javascript设置超时+回调

Javascript设置超时+回调,javascript,callback,settimeout,Javascript,Callback,Settimeout,我有一个关于回调和超时的javascript问题 这是我编写的一个示例代码段: var f1 = function(){ var result; window.setTimeout( function(){ console.log("timeout in 100ms"); result = 10; }.bind(this), 100); return result; }; 因此,我希望函数修

我有一个关于回调和超时的javascript问题

这是我编写的一个示例代码段:

var f1 = function(){
    var result;
    window.setTimeout(
        function(){
            console.log("timeout in 100ms");
            result = 10;
        }.bind(this), 100);
    return result;
};
因此,我希望函数修改变量结果。我使用了.bindthis来确保它知道结果是什么

尽管如此,当我跑f1时,输出是9,而不是10,这是我想要的


有什么线索吗

结果是一个数字。因此,它作为值9返回,而不是对对象的引用

绑定在您的场景中没有任何有用的效果。bind在此上下文中更改函数

返回包含值10的对象将起作用

var f1 = function(){
        var result = { value: 9 };
        window.setTimeout(
                          function(){
                            console.log("timeout in 100ms");
                            result.value = 10;}.bind(this), 100);
        return result;
};
你的问题可能有更好的解决方案

回调:

这样的函数可以这样使用:

f1(function(value)) {
    console.log(value); // Will print 10 after 100ms. 
})
另一种选择是,可以使用承诺:

您可以这样调用这样一个函数:

f1().then(function(value) {
   console.log(value); // Will print 10 after 100ms.
});

在函数已经返回后,您调用超时来修改值,因此它返回result的默认值,然后调用超时,由于该值的范围仅限于函数,因此在修改后您无法返回它

你能做的就是这样

var result = 9;
var f1 = function(){

            window.setTimeout(
                              function(){
                                console.log("timeout in 100ms");
                                result = 10;}.bind(this), 100);
            return result;};

调用f1后,t将返回9,然后调用结果,它将显示10;这只会影响this关键字的值。而且,如果结果是9,那么代码段似乎缺少一些东西。因此,对于解决方案,最初将返回值9。如果,比方说,你做了var a=f1,那么在100毫秒后,a的值将变为10。啊,谢谢。我不知道Promise是标准Javascript,总是假设它是包的一部分。那很有帮助,谢谢!
f1().then(function(value) {
   console.log(value); // Will print 10 after 100ms.
});
var result = 9;
var f1 = function(){

            window.setTimeout(
                              function(){
                                console.log("timeout in 100ms");
                                result = 10;}.bind(this), 100);
            return result;};