【发布时间】:2018-08-09 19:40:23
【问题描述】:
我需要让代码休眠,直到满足某些条件或超过 3 秒超时。然后返回一个简单的字符串。无论如何我可以做到这一点吗?
// this function needs to return a simple string
function something() {
var conditionOk = false;
var jobWillBeDoneInNMiliseconds = Math.floor(Math.random() * 10000);
setTimeout(function() {
// I need to do something here, but I don't know how long it takes
conditionOk = true;
}, jobWillBeDoneInNMiliseconds);
// I need to stop right here until
// stop here until ( 3000 timeout is passed ) or ( conditionOk == true )
StopHereUntil( conditionOk, 3000 );
return "returned something";
}
这就是我要做的:
我让浏览器滚动到页面底部,然后会调用一些 ajax 函数来获取 cmets(我无法控制它)。现在我需要等到 cmets 出现在带有“.comment”类的文档中。
我需要 getComments() 函数将 cmets 作为 json 字符串返回。
function getComments() {
window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);
var a = (document.querySelectorAll('div.comment'))
// wait here until ( a.length > 0 ) or ( 3 second is passed )
// then I need to collect comments
var comments = [];
document.querySelectorAll('div.comment p')
.forEach(function(el){
comments.push(el.text());
});
return JSON.stringify(comments);
}
getComments();
【问题讨论】:
-
这还不够信息:什么情况会导致
OK或false?这不是一个太微不足道的任务,通常使用Observables /EventEmitters 解决此类问题 -
我在代码中创建了一个简单的示例。例如。
condition变量将在大约 1 到 9 秒内为真。我需要代码等待 3 秒,直到该变量更改为true -
由于
JavaScript被执行asynchronously我需要查看代码 sn-p 评估它是否成功。也许是ajax请求?没有更多信息无法回答。 -
你不能真正从一个将处理移交给异步函数的函数返回一些东西。听起来你可能想使用类似 Promise 的东西 developers.google.com/web/fundamentals/primers/promises
-
请查看并告诉我这是否是您的问题? jsfiddle.net/qxw54mzs/16
标签: javascript sleep