async function test(){
setTimeout(function(){return 1}, 100)
};
test().then(console.log); // Never displayed如果删除了setTimeout包装,它可以工作:
async function test(){
return 1;
};
test().then(console.log); // Displayed发布于 2022-09-06 05:20:44
下面的函数不返回任何内容。它也不是一个承诺,它将用一个价值来解决。它只是一个函数,它为一个函数设置一个定时器,这个函数(将在窗口的上下文中运行)并返回1。返回的值在任何地方都不会被捕获。
async function test(){
setTimeout(function(){return 1}, 100)
};要从setTimeout访问值,您必须将其包装在一个承诺中,并让允诺与该值一起解析。
async function test(){
return new Promise((resolve,reject) => setTimeout(function(){resolve(1);}, 100));
};
test().then(console.log);
async function test2(){
return 1;
};
test2().then(console.log); // Displayed
另一种不使用承诺访问setTimeout内部值的方法是传递回调,如下所示。
async function test(callback){
setTimeout(function(){callback(1)}, 100)
};
test(console.log);
上面的代码说明了为什么使用承诺更容易对代码进行推理。您想要访问值的任何代码段(从setTimeout内部)都必须在回调中。这会变得很混乱
https://stackoverflow.com/questions/73616868
复制相似问题