【问题标题】:Prompting a value with setTimeout function使用 setTimeout 函数提示值
【发布时间】:2014-03-24 10:39:27
【问题描述】:
var label = prompt('Label for Vertical Line');

此代码返回我在提示字段中输入的label 中的值。但是我想要一些时间延迟来获得提示值。

我正在使用此代码:

var label=alertWithoutNotice();
function alertWithoutNotice(){
    var lab;
    setTimeout(function(){
        lab=prompt('Label for Vertical Line');
    }, 1200);
    return lab;
}

但这不会返回任何值。请告诉我有什么问题?

【问题讨论】:

  • 该函数在lab返回后由setTimeout执行
  • 那我该怎么办?你能给我正确的代码吗?
  • 你需要将使用lab的行为链接到给setTimeout的函数的末尾

标签: javascript


【解决方案1】:

这是一个按时间顺序排列的问题。 setTimeout 安排一个异步事件。这意味着,在它运行之前,脚本的其余部分将继续执行。

结果是您的return lab 行在超时回调触发之前执行。以此类推,lab 在此时未定义。

因此,您不能从异步事件中返回值,或者至少没有意义。

像 jQuery 的延迟对象这样的东西将是您在这里修复的最佳途径,但我不知道 jQuery 是否适合您。

【讨论】:

  • 如何使用setTimeout函数获取提示值??
  • 你已经明白了;只是因为我所说的原因,您无法从中返回。您当前拥有的模式没有简单的解决方法;您的脚本将继续运行,但没有 lab 的值,因为在回调触发之前它没有值。
【解决方案2】:

问题是你在超时之前返回值,因为 setTimeout 函数是异步的。

同步使用看这里:using setTimeout synchronously in JavaScript

【讨论】:

    【解决方案3】:

    由于您使用异步操作拨号,这里最简单的方法是使用回调函数。例如:

    alertWithoutNotice(function(label) {
        alert(label)
    });
    
    function alertWithoutNotice(callback) {
        setTimeout(function() {
            callback(prompt('Label for Vertical Line'));
        }, 1200);
    }
    

    所以想一想当label 可用时通知alertWithoutNotice。当它发生时,回调被调用。

    【讨论】:

    • 好的...但是如何将label 值存储在变量中?
    • 你需要彻底改变你的方法。如果您有异步代码,将其存储在变量中是没有意义的。使用回调。
    猜你喜欢
    • 2018-06-09
    • 2023-03-26
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多