Javascript设置超时+回调
我有一个关于回调和超时的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; }; 因此,我希望函数修
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;};