从setTimeout获取返回值
Get return value from setTimeout
我只是想从setTimeout
获得返回值,但我得到的是函数的整个文本格式?
function x () {
setTimeout(y = function () {
return 'done';
}, 1000);
return y;
}
console.log(x());
您需要为此使用Promises。它们在ES6中可用,但可以很容易地填充:
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以知道是否完成
相关文章:
- 如何从客户端的数组中获取用户输入和返回值
- 如何获取事件的返回值
- 获取最后一个返回值
- AngularJS:如何获取$http结果作为函数的返回值
- 如何在 Python 中获取此 JavaScript 函数的返回值
- 如何获取 jQuery 回调触发返回值
- 从ID Jquery类获取返回值时出现问题
- JSON获取地理位置在HTML中未返回值
- 如何获取在HTML页面上执行的Javascript函数的返回值
- 从 html.append 追加的 html 下拉列表中获取返回值
- 如何从Ajax请求中获取返回值并将其分配到元素中
- 安卓webview活动,如何获取js返回值
- 如果我使用html表单(而不是ajax),则获取服务器的响应代码或返回值
- jQuery deferred:用于延迟函数的返回,直到函数内的异步调用完成+获取返回值
- 如何使用Ajax内部调用JQuery在函数中获取返回值
- 在检查选中哪个按钮并从字段中获取值后返回值
- 如何在 javascript 中获取递归函数来输出每个返回值
- 获取 jQuery get().done() 函数的返回值
- 无法在 jQuery 中获取 Rails 返回值
- 将Angular $http返回值获取到另一个对象中