超时后Meteor.setTimeout返回

时间:2017-04-16 15:03:33

标签: javascript node.js meteor

我有这个开关案例,

var res=null;
switch(case){
case "Delay":
        console.log("Start Delay");
        var timer = Meteor.setTimeout(function(){
            console.log("done Delay");
            res="sample";
        },15000);
        console.log("test Delay");
        break;
}
return res;

上面的代码将记录“Start Delay”& “测试延迟”。然后它将启动计时器。 15000ms后,它将记录“完成延迟”。这里的问题是res变量的返回。在计时器启动之前,它已经返回res,它是null。

如何在超时后返回变量?

我也尝试了建议的答案,这是我的超时和睡眠功能代码,

var timeout = function(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
var sleep = async function(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}

我改变了我的开关盒,

var res=null;
switch(case){
case "Delay":
        console.log("Start Delay");
        sleep(function(){
            console.log("done Delay");
            res="sample";
        },15000);
        console.log("test Delay");
        break;
}
return res;

但是res变量仍然返回null而不是“sample”。

2 个答案:

答案 0 :(得分:0)

您的switch语句是异步的,在返回响应之前不会等待超时完成。

在这种情况下,您应该使用回调函数。以下是您可能尝试实现的一个粗略示例:

de_property

答案 1 :(得分:0)

我使用了来自npm的纤维/未来包装。此包允许函数在返回值之前等待其异步调用。