同步-为什么javascript异步函数一定要用回调的方式?

问题描述

为什么javascript异步函数一定要用回调的方式?

对于异步函数来说,回调方式和同步方式有何区别?

                 service
                .queryActivityJoin(data)
                .done(function (response) {

                    // 如果已经参加
                    if (response.data.is_join == 1) {

                        $('.prize').css({

                            "background-image": "url(http://img.gsxservice.com/0cms/d/file/content/2015/01/54b8a83098788.jpg)"
                        });

                    }
                    // 如果还没有参加
                    else if (response.data.is_join == 0) {

                        $('#appmain')

                        .on('click', '.prize', function () {

                            service.addActivityJoin(data);

                            window.location.reload();
                        });
                    }
                });

解决方案

因为JS是单线程的,回调好处在于避免JS阻塞

解决方案二:

其实不一定
https://cnodejs.org/topic/5425fb61326dfbe724dbd64e
看这个代码,就可以用你熟悉的方式调用异步代码了,无需写回调。

解决方案三:

当然了,回调的方式更直观,因为异步的含义就是调用后不管, 继续执行自己的代码,而异步执行什么时候结束是不知道的。执行好了通知你。
用回调函数很好体现了这一点。

解决方案四:

居于回调就不会阻塞ui了。。js没有线程的概念,你不居于回调,一个for循环几万次做大量计算你流量器就假死了。就和你ajax同步异步一样。

时间: 2024-09-12 02:29:57

同步-为什么javascript异步函数一定要用回调的方式?的相关文章

获取JavaScript异步函数的返回值_javascript技巧

今天研究一个小问题: 怎么拿到JavaScript异步函数的返回值? 1.错误尝试 当年未入行时,我的最初尝试: <script> function getSomething() { var r = 0; setTimeout(function() { r = 2; }, 10); return r; } function compute() { var x = getSomething(); alert(x * 2); } compute(); </script> 2.回调函数

谈谈JavaScript异步函数发展历程_javascript技巧

<The Evolution of Asynchronous JavaScript>外文梳理了JavaScript异步函数的发展历程,首先通过回调函数实现异步,之后又经历了Promise/A+.生成器函数,而未来将是async函数的.感谢景庄对该文章的翻译,内容如下: 现在让我们一起来回顾这些年来JavaScript异步函数的发展历程吧. 回调函数Callbacks 似乎一切应该从回调函数开始谈起. 异步JavaScript 正如我们所知道的那样,在JavaScript中,异步编程方式只能通过

从JavaScript的函数重名看其初始化方式_javascript技巧

今天有个哥们问我要是JavaScript函数重名了会有什么后果?开始我没有细想,就说可能会出错吧,可是等我实验完了发现页面没有任何脚本错误提示,而且程序也运行了,只是对同名函数的调用执行了位置靠后的一个.     回头仔细一想,这个结果完全可以接受,因为脚本在页面里本身就是顺序执行下来的,包括函数的定义,但然如果只是定义 function foo(){} 这种形式,我们是跟踪不到函数初始化的.可是如果是定义类的方式,我们就可以明显地跟踪到函数的初始化顺序.比如: function foo() {

JavaScript中如何异步函数的返回值

今天研究一个小问题: 怎么拿到JavaScript异步函数的返回值? 1.错误尝试 当年未入行时,我的最初尝试: <script> functiongetSomething() {  varr = 0;  setTimeout(function() {  r = 2;  }, 10);  returnr; }   functioncompute() {  varx = getSomething();  alert(x * 2); } compute(); </script> 2.回

Javascript异步编程之setTimeout与setInterval详解分析(一)

  在谈到异步编程时,本人最主要会从以下三个方面来总结异步编程(注意:特别解释:是总结,本人也是菜鸟,所以总结不好的,请各位大牛多多原谅!)       1. setTimeout与setInterval详细分析基本原理.       2. 分布式事件(pub/sub).       3. Promise对象和Deferred对象.       接下来这篇博客会总结setTimeout和setInterval基本点,对于上面三点会分三篇博客分别来总结,对于知道上面三点的人,但是又不是非常 了解全

探索Javascript异步编程

异步编程带来的问题在客户端Javascript中并不明显,但随着服务器端Javascript越来越广的被使用,大量的异步IO操作使得该问题变得明显.许多不同的方法都可以解决这个问题,本文讨论了一些方法,但并不深入.大家需要根据自己的情况选择一个适于自己的方法. 笔者在之前的一片博客中简单的讨论了Python和Javascript的异同,其实作为一种编程语言Javascript的异步编程是一个非常值得讨论的有趣话题. JavaScript 异步编程简介 回调函数和异步执行 所谓的异步指的是函数的调

JavaScript 异步方案 async/await 实例教程

构建一个应用程序总是会面对异步调用,不论是在 Web 前端界面,还是 Node.js 服务端都是如此, JavaScript 里面处理异步调用一直是非常恶心的一件事情.以前只能通过回调函数,后来渐渐又演化出来很多方案,最后 Promise 以简单.易用.兼容性好取胜,但是仍然有非常多的问题.其实 JavaScript 一直想在语言层面彻底解决这个问题,在 ES6 中就已经支持原生的 Promise ,还引入了 Generator 函数,终于在 ES7 中决定支持 async 和 await .

详解XMLHttpRequest(一)同步请求和异步请求_javascript技巧

XMLHttpRequest 让发送一个HTTP请求变得非常容易.你只需要简单的创建一个请求对象实例,打开一个URL,然后发送这个请求.当传输完毕后,结果的HTTP状态以及返回的响应内容也可以从请求对象中获取.  通过XMLHttpRequest生成的请求可以有两种方式来获取数据,异步模式或同步模式.请求的类型是由这个XMLHttpRequest对象的open()方法的第三个参数async的值决定的.如果该参数的值为false,则该XMLHttpRequest请求以同步模式进行,否则该过程将以异

不同js异步函数同步的实现方法_javascript技巧

不同函数达到同步的函数模拟 funcList是函数执行函数的队列,其中回调函数中flag=true是同步标记量 <script> var flag = false; function funcTest(t,func){ setTimeout(function(){ (function(param){ console.log(param); func(); }(t)); },t*1000); } var funcList = []; funcList.push(function(){funcTe