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

时间:2012-12-05 19:13:27

标签: javascript

长话短说,没有回调函数可以做这样的事吗?

function foo(){
  return 'foo';
}
function bar(){
  x = setTimeout(foo, 2000);
  alert(x);
}

不修改foo()函数。添加中间函数会很好,但我不认为这会完成任何事情。

长篇故事: 我希望通过window.open模拟window.showModalDialog,而不必在任何地方使用dang事件重写代码。我发现的唯一建议是使用while循环或ping服务器来模拟sleep()。这两种解决方案都不是理想的,我想知道是否还有其他方法可以做这样的事情减去回调函数方法?

4 个答案:

答案 0 :(得分:6)

简短回答:

我会更详细地回答,但既然你要求一个“简短的”答案并且另外一个“回调”,那么只剩下这个了。

setTimeout 1}}被忽略了。

答案 1 :(得分:3)

不,那是不可能的。但是,你可以返回represents the future value的内容,然后让你添加回调:Promise

答案 2 :(得分:0)

重构您的设计。您可以通过超时实现您正在寻找的内容,但不是这样。不要降低约定,使用回调

function foo(){
 alert('foo');
}
function bar(){
 setTimeout(foo, 2000);
}

只要保存变量中的超时,就会用于清除超时。

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

答案 3 :(得分:0)

setTimout已经返回了一些东西,但它不是evalauated表达式的值。它会返回一个timout对象,如果需要,可以让您在以后中止并执行其他操作。 setTimeout只是告诉函数将来执行。

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

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

注意:这意味着您几乎无法控制何时回答"已设定。这就是为什么它总是最好使用回叫,因为你告诉你的代码"将来,当你有一个价值时,在它上面执行这个功能"。