从 setTimeout 获取返回值

IT技术 javascript return settimeout return-value
2021-02-19 04:49:36

我只想从中获取返回值,setTimeout但我得到的是函数的整个文本格式?

function x () {
    setTimeout(y = function () {
        return 'done';
    }, 1000);
    return y;
}

console.log(x());
5个回答

为此,您需要使用 Promise。它们在 ES6可用,但可以很容易地填充

function x() {
   var promise = new Promise(function(resolve, reject) {
     window.setTimeout(function() {
       resolve('done!');
     });
   });
   return promise;
}

x().then(function(done) {
  console.log(done); // --> 'done!'
});

在 ES2017 中使用async/awaitasync函数内部会变得更好

async function() {
  const result = await x();
  console.log(result); // --> 'done!';
}
您可以在问题中发布更清晰的代码示例吗?
2021-04-26 04:49:36
实际上,done在我的示例中是一个需要在 setTimeout 内返回的Promise..因为我无法在 setTimeout 内获得返回的 deferred.resolve()。会怎样?谢谢
2021-04-29 04:49:36

您无法从传递给 的函数中获得返回值setTimeout

调用setTimeoutx在您的示例中)的函数将在您传递给的函数setTimeout甚至被调用之前完成执行并返回

无论您想对获得的值做什么,都需要从传递给setTimeout.

在您的示例中,这将写为:

function x () {
    setTimeout(function () {
        console.log("done");
    }, 1000);
}

x();
该问题询问如何“返回”一个值。你的函数并没有真正返回任何东西,而是执行一个 console.log 函数。
2021-04-23 04:49:36
@kaizer1v——那是因为不可能返回值(因为我用了答案的前两段来解释)。
2021-05-03 04:49:36

最好对函数x以及在超时后要执行的任何任务进行回调,然后在该回调中发送。

function x (callback) {
    setTimeout(function () {
        callback("done");
    }, 1000);
}

x(console.log.bind(console)); //this is special case of console.log
x(alert) 
请记住,这不会在函数调用之后等待,因此它实际上可能不会发生。例如添加 process.exit,在调用 x 之后,“done”将永远不会完成。
2021-04-16 04:49:36

您可以像下面的示例一样使用 Promise 和 setTimeOut 的组合

let f1 = function(){
    return new Promise(async function(res,err){
        let x=0;
        let p = new Promise(function(res,err){
            setTimeout(function(){
                x= 1;
                res(x);
            },2000)
        })
        p.then(function(x){
            console.log(x);
            res(x);
        })


    });
}

我想你想要知道事件发生与否的标志。setTimeout 不返回值。您可以使用变量来检测事件是否发生

var y="notdone";
   setTimeout(function () {
         y="done";
    }, 1000);

您可以在超时发生后访问变量 y 以了解完成与否