const express = require('express');
const app = express();
const port = 4444;
app.get('/', async (req, res) => {
console.log('got request');
await new Promise(resolve => setTimeout(resolve, 10000));
console.log('done');
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
Run Code Online (Sandbox Code Playgroud)
如果我同时点击 get 请求 http://localhost:4444 三次,那么它会返回如下日志
got request
done
got request
done
got request
done
Run Code Online (Sandbox Code Playgroud)
由于节点事件循环和回调队列位于进程线程外部,它不应该以下面的方式返回输出吗?(也许我错了,但需要对 Nodes 内部结构有一些了解)和 Node 中的外部 api 请找到附图 Javascript 运行时环境
got request
got request
got request
done
done
done
Run Code Online (Sandbox Code Playgroud) 通过不深入实际用法,我创建了一个简单的示例来解释我想要做什么。
我有一个状态对象{num:0},我想在 10 秒内每秒更新一次 num,据此,我创建了一个工作完美的类组件。
class App extends React.Component {
constructor() {
super();
this.state = {
num: 0
};
}
componentDidMount = () => {
for (let i = 0; i < 10; i++) {
setTimeout(() => this.setState({ num: this.state.num + 1 }), i * 1000);
}
};
render() {
return (
<>
<p>hello</p>
<p>{this.state.num}</p>
</>
);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想在功能组件中复制相同的功能,但我做不到。我尝试如下图所示:
const App = () => {
const [state, setState] = React.useState({ num: 0 });
React.useEffect(() => {
for …Run Code Online (Sandbox Code Playgroud) 嘿程序员,
我有一个基本的textarea:
<textarea id='text_comment'></div>
Run Code Online (Sandbox Code Playgroud)
我有这个功能:
$('#text_comment').live('keypress', function() {
setTimeout(function() {
string = $(this).val();
alert(string);
}, 500);
});
Run Code Online (Sandbox Code Playgroud)
它应该警告textarea中的值,但它不会发出任何警报.
我希望它在500ms后获得textarea的值,但是如果它在setTimeout函数内部,它似乎没有设置变量.
当我开始我的脚本时,我有这个:
var my_great_masterpiece = new function ()
{
var self = this;
Run Code Online (Sandbox Code Playgroud)
然后在我的脚本中我有这个:
response_xml: function ()
{
if (self.http_request.readyState == 4)
{
if (self.http_request.status == 404 && countXmlUrl <= 3)
{
countXmlUrl++;
self.realXmlUrl = xmlUrl[countXmlUrl];
self.request_xml();
}
if (self.http_request.status == 200)
{
self.xmlDoc = self.http_request.responseXML;
self.storage.setItem('domains_raw_xml', self.http_request.responseText);
self.main.peter_save_data();
self.timervar = setTimeout(function ()
{
// ########### Below line gives the error #############################
self.new_version_show_window();
}, 2000);
}
}
},
new_version_show_window: function ()
{
...
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
错误:self.new_version_show_window不是函数
我究竟做错了什么?
谢谢!
我的setTimeout函数有问题.这是代码:
1 var urlArray = ["pic1.gif"; "pic2.gif"]
2 function changeBackground(elementId, backgroundImage){
3 document.getElementById(elementId).style.background="url("+backgroundImage+")";
4 }
5 function mouseover_1(elementId){
6 changeBackground(elementId,urlArray[0]);
7 setTimeout("changeBackground(elementId,urlArray[1])",300);
8 }
Run Code Online (Sandbox Code Playgroud)
并在身体:
<area shape="rect" coords="0,0,95,91" onMouseOver="mouseover_1('navigator_1')">
Run Code Online (Sandbox Code Playgroud)
现在,Javascript代码中的第6行就像一个魅力(图片更改!),但第7行不起作用(没有图片更改).这是Firefox中调试的错误:
elementId is not defined line: 7
Run Code Online (Sandbox Code Playgroud)
但是由于第6行有效,我真的不知道问题是什么.你有什么建议吗?
<!doctype html>
<html>
<head>
<title>What is 'this'?</title>
<script>
function Obj(){
log('Obj instantiated');
}
Obj.prototype.foo = function (){
log('foo() says:');
log(this);
}
Obj.prototype.bar = function (){
log('bar() was triggered');
setTimeout(this.foo,300);
}
function log(v){console.log(v)}
var obj = new Obj();
</script>
</head>
<body>
<button onclick="obj.foo()">Foo</button>
<button onclick="obj.bar()">Bar</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是控制台输出:
Obj instantiated
foo() says:
Obj {foo: function, bar: function}
bar() was triggered
foo() says:
Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
Run Code Online (Sandbox Code Playgroud)
因此,当它从setTimeout调用obj.foo时,'this'会将所有权更改为Window.如何防止该行为或正确使用该行为?
谢谢
有人可以在下面的代码中找到问题
$(document).ready(function () {
$("#leftsettingswindow").on("keyup", "#fontsize2", function () {
setTimeout(function () {
var txtVal = this.value;
$('#content').css("font-size", txtVal + "%");
}, 3000);
});
});
Run Code Online (Sandbox Code Playgroud)
这完美无缺,
$(document).ready(function () {
$("#leftsettingswindow").on("keyup", "#fontsize2", function () {
var txtVal = this.value;
$('#content').css("font-size", txtVal + "%");
});
});
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试使用JavaScript和jQuery创建一个移动面板.
我做了这个工作演示,JS部分看起来像这样:
$("nav.nav").hover(function(){
$("nav.nav").animate({left:'-5px'},100,"swing");
},
function(){
$("nav.nav").animate({left:'-170px'},100,"swing");
});
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它正在工作,但是当我离开面板时我想添加延迟,因为有一段时间,我错误地将面板留下1个像素,这很烦人.
我试着setTimeout("javascript function", milliseconds);像这样使用:
$("nav.nav").hover(function(){
$("nav.nav").animate({left:'-5px'},100,"swing");
}, setTimeout(function(){
$("nav.nav").animate({left:'-170px'},100,"swing");
},10));
Run Code Online (Sandbox Code Playgroud)
(超时中的回调函数)但它不起作用,我不知道为什么.
什么原因可能是setTimeout等待2-4次被配置执行的原因?
var TIMEOUT = 700;
console.log("TIMEOUT", TIMEOUT);
var preTimeout = new Date();
setTimeout(function() {
console.log("timeout took:", new Date() - preTimeout);
}, TIMEOUT);
Run Code Online (Sandbox Code Playgroud)
这导致timeout took:网站上的1200-4000.
这2个怎么不相同?
这不起作用.
const message = async () => {
setTimeout(() => {
console.log("delayed")
return true
}, 1000)
}
Run Code Online (Sandbox Code Playgroud)
但这样呢?
const message = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("delayed")
resolve(true)
}, 1000)
})
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着只有在函数范围内(而不是在另一个函数中)才能在异步函数中"返回"?
异步函数返回的承诺是否与常规承诺不同?它是如何完全初始化的?
settimeout ×10
javascript ×9
jquery ×3
asynchronous ×1
concurrency ×1
function ×1
jquery-hover ×1
node.js ×1
promise ×1
react-hooks ×1
reactjs ×1
this ×1
use-effect ×1
variables ×1