Vai*_*y07 51 javascript return settimeout
我只想从setTimeout获取返回值,但我得到的是函数的整个文本格式?
function x () {
setTimeout(y = function () {
return 'done';
}, 1000);
return y;
}
console.log(x());
Run Code Online (Sandbox Code Playgroud)
Mat*_*son 63
你需要使用Promises.它们在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!'
});
Run Code Online (Sandbox Code Playgroud)
使用async/ await在ES2017中,如果在async函数内部变得更好:
async function() {
const result = await x();
console.log(result); // --> 'done!';
}
Run Code Online (Sandbox Code Playgroud)
Que*_*tin 15
您无法从传递的函数中获取返回值setTimeout.
调用的函数setTimeout(x在您的示例中)将完成执行并在您传递给的函数之前返回setTimeout甚至被调用.
无论你想要做什么,你需要从传递的功能中做到这一点setTimeout.
在您的示例中,这将写为:
function x () {
setTimeout(function () {
console.log("done");
}, 1000);
}
x();
Run Code Online (Sandbox Code Playgroud)
最好对函数进行回调x,并在超时后发送该回调来执行您想要执行的任何任务。
function x (callback) {
setTimeout(function () {
callback("done");
}, 1000);
}
x(console.log.bind(console)); //this is special case of console.log
x(alert)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65263 次 |
| 最近记录: |