这个问题在这里已经有了答案:如何从异步调用返回响应? (43 个回答) 2 年前关闭。
我只想从 setTimeout
获取返回值,但我得到的是函数的完整文本格式?
function x () {
setTimeout(y = function () {
return 'done';
}, 1000);
return y;
}
console.log(x());
x
中获得回调并使用 done 调用该函数。
const x = async (waitMs) => new Promise((resolve) => setTimeout(() => resolve('done'), waitMs));
console.log(await x(1000));
为此,您需要使用 Promises。它们是 available in ES6,但可以填充 quite easily:
function x() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('done!');
});
});
}
x().then((done) => {
console.log(done); // --> 'done!'
});
在 ES2017 中使用 async
/await
时,如果在 async
函数中会变得更好:
async function() {
const result = await x();
console.log(result); // --> 'done!';
}
您无法从传递给 setTimeout
的函数中获得返回值。
调用 setTimeout
的函数(在您的示例中为 x
)将在您传递给 setTimeout
的函数甚至被调用之前完成执行并返回。
无论您想对获得的值做什么,都需要通过传递给 setTimeout
的函数来完成。
在您的示例中,这将被写为:
function x () {
setTimeout(function () {
console.log("done");
}, 1000);
}
x();
最好为函数 x
进行回调,并在该回调中发送超时后要执行的任何任务。
function x (callback) {
setTimeout(function () {
callback("done");
}, 1000);
}
x(console.log.bind(console)); //this is special case of console.log
x(alert)
您可以使用 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 以了解是否完成
不定期副业成功案例分享
done
是一个需要在 setTimeout 内返回的承诺。因为我无法在 setTimeout 内获得返回的 deferred.resolve()。会怎么样?谢谢你