Javascript 是否可以在没有回调函数的情况下从setTimeout返回值?

Javascript 是否可以在没有回调函数的情况下从setTimeout返回值?,javascript,Javascript,长话短说,在没有回调函数的情况下,这样做是否可能 function foo(){ return 'foo'; } function bar(){ x = setTimeout(foo, 2000); alert(x); } 不修改foo()函数。添加一个中介函数会很好,但我认为这不会有任何效果 长话短说: 我希望通过window.open模拟window.showmodaldialdialog,而不必在使用dang的任何地方进行重要的代码重写。我发现的唯一建议是使用while循环或

长话短说,在没有回调函数的情况下,这样做是否可能

function foo(){
  return 'foo';
}
function bar(){
  x = setTimeout(foo, 2000);
  alert(x);
}
不修改foo()函数。添加一个中介函数会很好,但我认为这不会有任何效果

长话短说: 我希望通过window.open模拟window.showmodaldialdialog,而不必在使用dang的任何地方进行重要的代码重写。我发现的唯一建议是使用while循环或ping服务器来模拟sleep()。这两种解决方案对我来说都不是理想的,我想知道除了回调函数方法之外,是否还有其他方法可以做到这一点?

简短回答:没有

我会更详细地回答,但既然你要求一个“简短”的回答,并排除了另一个“回调”,那么就只剩下这句话了


setTimeout
将始终返回一个标识符以清除超时,并且从传递到
setTimeout
的函数返回的任何内容都将被忽略。

不,这是不可能的。但是,您可以返回一些内容,并允许您在之后添加回调:a。

重构您的设计。您很可能用一个超时来实现你想要的,但不要像这样。不要违背惯例,使用回调

function foo(){
 alert('foo');
}
function bar(){
 setTimeout(foo, 2000);
}
只要将超时保存在变量中,它就用于清除超时

timeoutID = setTimeout();
window.clearTimeout(timeoutID);

setTimeout已经返回了一些内容,但它不是evaluated表达式的值。它返回一个timout对象,允许您在需要时中止并在以后执行其他操作。setTimeout只是告诉函数在将来执行

如果您想获得适合您的环境的功能,可以使用以下内容:

var answer = null;
setTimeout(function() {
    /*do something to 'answer'*/
    answer = 14;
}, 1000);

注意:这意味着您无法控制何时设置“应答”。这就是为什么最好使用回调,因为您告诉您的代码“将来,当您有值时,对其执行此函数”“

会做你需要的吗?答案并不完全准确,需要补充一点澄清
setTimeout
确实返回了一个值,而不是您期望的值。它返回计时器的id,这样无论出于何种原因,您都可以取消超时并阻止它运行。编辑:对该回复的编辑准确地澄清了问题:不,网络工作者不会这么做,尤其是因为我一直在争取IE支持,直到7点,感谢Eli在jAndy的回答中查看的信息,不知道。记住,
setTimeout
不应该像暂停或延迟那样使用。关键是,你可以让它自由地出发,在继续前进的同时完成它的事情。要使示例中的代码正常工作,函数必须在
x
准备好
alert()
之前在两行之间停止2秒钟。如果您希望它像延迟一样运行,请尝试在
foo()
中继续您的程序,或者让
foo()
调用另一个继续该程序的函数。桑迪,这正是我想要的,一个没有foo()调用另一个函数的延迟。我想我想要我的蛋糕,也想吃它:)嗯,谢谢你,看起来很有趣这可能会帮助我解决问题,将进一步探索和报告嗯,不完全是,仍然需要回调来填充数据并修改foo()函数,这是我试图避免的,不过谢谢你的提示,也许在其他地方更有用,我希望采用某种形式的阻塞方式警报、确认和showModalDialog doNo,JavaScript是单线程的,不允许阻塞。这简直是不可能的。是的,这就是我担心的,糟糕的是他们让这三件事阻塞了,其他什么都没有,我发现了基于while的黑客,但在我有窗口的时候敲打CPU。开放式也不是一个理想的解决方案…谢谢你的详细信息,我不是真的想要一个简短的答案,我的意思是,我对我的问题给出了一个短/长的设想。不过,我很欣赏简短的回答和细节。非常感谢。