相关疑难解决方法(0)

JavaScript如何在后台处理AJAX响应?

由于JavaScript在单个线程中运行,在发出AJAX请求后,后台实际发生了什么?我想更深入地了解这一点,任何人都可以解释一下吗?

javascript xmlhttprequest

136
推荐指数
2
解决办法
2万
查看次数

JavaScript - 什么时候调用堆栈变得"空"?

我在事件循环中读过几个帖子/ SO线程,根据MDN的文章,

当堆栈为空时,将从队列中取出一条消息并进行处理.

作为一个JS新手,我仍然感到困惑的是 - 什么时候调用堆栈变得"空"?例如,

<script>
function f() {
  console.log("foo");
  setTimeout(g, 0);
  console.log("foo again");
}
function g() {
  console.log("bar");
}
function b() {
  console.log("bye");
}

f();
/*<---- Is the stack empty here? */
b();
</script>
Run Code Online (Sandbox Code Playgroud)

正确的执行顺序是foo- foo again- bye- bar.

但是今天我开始思考:退出f()电话后,技术上的堆栈是不是很空?我的意思是在那一点上我们不在任何函数内部,并且我们还没有开始任何新的执行,所以不应该处理setTimeout调用消息(已经立即排队),然后继续执行b(),并给出顺序foo- foo again- bar- bye

如果我们有一百万行代码或一些密集计算要执行并且setTimeout(func, 0)只是在队列中停留多长时间怎么办?

javascript concurrency asynchronous event-loop settimeout

17
推荐指数
1
解决办法
1756
查看次数

Node.js服务器有多个并发请求,它是如何工作的?

我知道node.js是一个单线程,异步,非阻塞的i/o.我已经阅读了很多相关内容.例如,PHP每个请求使用一个线程,但节点只使用一个线程,就像那样.

假设在node.js服务器上有三个请求a,b,c同时到达.其中三个请求需要大量阻塞操作,例如,他们都想读取相同的大文件.

那么请求如何排队,执行阻塞操作的顺序以及调度响应的顺序是什么?当然使用了多少线程?

请告诉我三个请求的请求到响应的顺序.

nonblocking single-threaded node.js

17
推荐指数
1
解决办法
6977
查看次数

我是否需要关注异步Javascript的竞争条件?

假设我加载了一些我将来会知道将要调用window.flashReady并将设置的Flash影片window.flashReadyTriggered = true.

现在我有一段代码,我想在Flash准备就绪时执行.如果window.flashReady已经被调用,我希望它立即执行它,如果尚未调用它我想把它作为回调window.flashReady.天真的方法是这样的:

if(window.flashReadyTriggered) {
  block();
} else {
  window.flashReady = block;
}
Run Code Online (Sandbox Code Playgroud)

因此我基于此的关注是,if条件中的表达式被评估为false,但之后block()可以执行,window.flashReady由外部Flash触发.因此,block永远不会被称为.

是否有更好的设计模式来实现我想要的更高级别目标(例如,手动调用flashReady回调)?如果没有,我是安全的,还是我应该做的其他事情?

javascript

14
推荐指数
3
解决办法
1万
查看次数

这个代码可以在socket io中引起竞争条件吗?

我是节点js和socket io的新手.此代码是否可以导致计数器变量的竞争条件.我应该使用锁定库来安全地更新计数器变量.

"use strict";

module.exports = function (opts) {
    var module = {};

    var io = opts.io;

    var counter = 0;

    io.on('connection', function (socket) {

        socket.on("inc", function (msg) {
            counter += 1;
        });

        socket.on("dec" , function (msg) {
            counter -= 1;
        });

    });


    return module;
};
Run Code Online (Sandbox Code Playgroud)

node.js socket.io

4
推荐指数
1
解决办法
876
查看次数