js 判断异步执行完成方法总汇,比如多个ajax执行完毕后执行其他方法

时间: 2018-01-11阅读: 11304标签: ajax

在多个异步操作中,由于不确定异步操作的执行顺序,如何判断异步操作在已经执行完成的情况下,再执行一个新的操作,有哪些方法可以实现?


方法一、函数回调:

js中把函数当做对象来传递,是异步编程最基本的方法,在异步执行完成后,在执行里面的回调方法,这样不会出现程序堵塞的情况,例如:

function fn(callback){
   setTimeout(function(){
      callback("异步后执行");
   }, 1000);
}
function fn_1(data){
	console.log('执行:'+data)
}
fn(fn_1);

说明:

优点:使用简单、设计灵活、比较容易理解。
缺点:不利于代码的阅读和维护,各个部分之间高度耦合,流程会很混乱,而且每个任务只能指定一个回调函数。  


方式二、事件监听:

采用事件驱动模式,方法的执行是根据某个事件的发生来决定的,在异步执行完成后触发事件,来执行新的操作:

var _listeners={};
Function.prototype.on=function(name,fn) { //监听事件:[事件名称,执行方法]
	if(typeof fn === "function") {
        _listeners[name]=fn;
    }  
};
Function.prototype.trigger=function(name,data){ //执行事件:[事件名称,传递数据]
	if(name && _listeners[name]){  
	   _listeners[name](data);
	}
};
function fn(){
  setTimeout(function(){ 
    fn.trigger('done',"异步后执行");//fn发起done的事件
  }, 1000);
}
function fn_1(data){
	console.log('执行:'+data);
}
fn.on('done', fn_1);
fn();

说明:

采用这种方法可以绑定多个事件,指定多个操作,有利于模块化,但是程序都变成了事件驱动,对运行流程变的不那么清晰。


方法三:Promises对象

采用Promise来包装异步操作,然后定义async 函数,用await等待promise异步执行完成后,执行新的操作

function fn() {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve('异步后执行')
        }, 1000)
    })
}
var fn_1 = async function() {
    var data = await fn();//等待异步操作执行完了后执行的方法
    console.log('执行:'+data);
}
fn_1();

说明:

实现起来简洁高效,不仅实现了回调逻辑的解耦,还实现了基础的异步流程控制


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/347

ajax请求中的contentType和dataType

contentType设置你发送给服务器的格式,有以下三种常见情况。application/x-www-form-urlencoded :默认值,application/json:服务端消息主体是序列化后的 JSON 字符串。

Ajax异步请求

其实我理解前端如何通过url从后端获取数据,对于异步请求Ajax一直表示有点迷惑,所谓不尝试和不探索,光靠看概念你是永远不能理解代码的魅力的,正好公司的项目里用到了最经典的Ajax,正好作为一个案例来学习如何用json的Data

使用原生Ajax进行用户名重复的检验

XMLHtttpRequest对象调用status属性可获得服务器返回的 HTTP 状态码,Ajax请求时,加了个一时间戳,目的是防止浏览器使用缓存。因为在浏览器开了缓存的情况下,对同一链接的相同参数

javascript的ajax是什么?

AJAX(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。Ajax 它是与服务器交换数据的技术,在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),它在不重载全部页面的情况下

关于ajax请求数据,并将数据赋值给全局变量的一些解决方法

在使用ajax请求数据是,开始的时候是打算将ajax的数据取出,并赋予给全局变量,但是在实际编码过程中发现并不能将数据赋予给最开始定义的全局变量,出现这个问题的原因是由于ajax异步加载的原因,所以只能用其他方法来解决,下来是解决的方法

ajax设置header头部之后造成跨域的解决方案

解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头、正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现。

使用AJAX实现文件拖拽上传功能详解

前端选择文件上传的两种方式:对话框选择方式上传、拖拽选择方式上传;如何上传获取到的文件?使用AJAX即可通过表单方式上传文件。

ajax提交 使用css 控制按钮防止重复点击

有时候遇到ajax提交数据时 多点几次会出现重复点击的情况.所以下面介绍一个用css控制防重复点击的效果,submitting 是一个类 没有任何意思,也可以写成变灰度的效果

ajax请求 get与post的区别?_get和post的使用场景

使用Ajax时,采用Get或者Post方式请求服务器,那么它们的区别有哪些呢?相比post,get请求参数跟在url后面,提交数据的长度长度有限制,而且会被浏览器缓存起来,存在一定的安全问题。

Ajax原理以及优缺点

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!