相关疑难解决方法(0)

是否有任何原子javascript操作来处理Ajax的异步性质?

我从服务器动态加载代码(函数)并将其作为javascript代码执行,然后将其存储在数组中并执行.所有这些代码片段必须只执行一次.伪造的代码如下

function fetch(foo){
    if (foo in fooArray){
          //Do Nothing
    else{
          //Fetch foo via Ajax and execute foo()
    }
}
Run Code Online (Sandbox Code Playgroud)

问题要复杂得多,但基本上如果我发出以下命令

fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');
fetch('someFunctionName');
Run Code Online (Sandbox Code Playgroud)

所有四个都将执行if (foo in fooArray)并假设它不在数组中,并且所有四个将继续获取代码并执行它.我记得当天回来学习信号量和互斥量,是​​否有javascript这样的东西.

javascript ajax asynchronous atomic

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

如何在javascript中实现异步编程(promises)?是不是javascript一个ui-threaded环境?

JS中的Prom允许您进行异步编程,如下所示:

DoSomething().then(success, failure);

DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)

每当我写完之前的代码,它就会到达DoSomethingElse()之前success.怎么可能?JS不是单线程环境(不包括Web工作者)吗?它完成了setTimeout吗?

javascript asynchronous promise

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

异步ajax回调所淹没的"原子"操作

我知道,使用JavaScript和'atomic'这两个词 - 同一个句子中的任何内容都有点奇怪,因为JavaScript被认为是异步的,因此不是非常原子的.

//编辑这是我的错误!通过让警报响起(并在Chrome中隐藏更多警报),它很快就会中断并让其他代码飞起来.JavaScript是单线程的.

快速 - >实际问题; 我们在哪种情况下从异步回调中断中保存,我们如何防止它们出现在某些代码块中?

长 - >我的情景; 我的整个应用程序非常递归并触发了许多ajax请求,返回时会触发更多可能触发更多ajax请求的递归函数.在我的代码中,我在一个数组上有一些非常关键的操作,必须在下一个操作发生之前完成(尽管简单的push/splice逻辑).

我有一个问题,我在一个数组中获得了一个键的索引并将其保存在一个变量中.然后我把它比作-1,如果它是真的,我拼接(不仅仅是取消)数组中的元素.现在,在获取索引和拼接之间,异步回调返回结果并启动递归的东西,然后通过添加/删除更多项来改变数组(并弄乱我之前获得的索引值).

这是旧代码;

if ( this.dataset && (index=this.dataset.children.indexOf(child.key) )!==-1 ){
    console.log("removed from dataset!");
    //<=== AJAX Call Returns and adds/removes items from the array
    this.dataset.children.splice(index, 1); //goes bad, because index not good anymore
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是'工作',但不是优化的代码

if ( this.dataset && (index=this.dataset.children.indexOf(child.key) )!==-1 ){
    console.log("removed from dataset!");  
    //<=== AJAX Call Returns and adds/removes items from the array
    //Problem solved, since I'm getting the index again
    this.dataset.children.splice(this.dataset.children.indexOf(child.key), 1);
    ...
}
Run Code Online (Sandbox Code Playgroud)

我只是再次搜索索引并直接拼接它.

我的一般问题是,我们在哪种情况下从异步回调中断中保存,我们如何防止它们出现在某些代码块中? …

javascript ajax asynchronous transactions atomic

2
推荐指数
1
解决办法
3885
查看次数

标签 统计

asynchronous ×3

javascript ×3

ajax ×2

atomic ×2

promise ×1

transactions ×1