javascript 实现多个异步函数的同时执行后再执行回调函数
2017-08-05 19:21
323 查看
首先,思路来自于 http://www.cnblogs.com/liuliang-wifi/p/6832850.html。这篇文章写的很好,相比而言这篇文章是更有难度一点的,有兴趣的可以欣赏一下这篇文章。链接: href="http://www.cnblogs.com/liuliang-wifi/p/6832850.html" target=_blank>点击打开链接
其次,这个问题来自于阿里一面的姐姐问道的。
当时我的回答是调用Promise函数来实现,面试姐姐希望我实现一下Promise函数,我回忆起阮一峰教程里是通过Generator函数实现的。但是面试姐姐更希望用javascript原生实现,我当时脑子一个懵,心里其实是有思路的,但是当时卡住不知道如何回答,哈哈。所以今天就整理了一下。
代码如下:
ac81
function ajax1(that){
setTimeout(function(){
console.log('I am ajax1!');
that.count++;
if(that.finalCall &&
that.count ===
that.leng){
that.fun();
}
}, 1000);
}
function ajax2(that){
setTimeout(function(){
console.log('I am ajax2!');
that.count++;
if(that.finalCall &&
that.count ===
that.leng){
that.fun();
}
}, 2000);
}
function ajax3(that){
setTimeout(function(){
console.log('I am ajax3!');
that.count++;
if(that.finalCall &&
that.count ===
that.leng){
that.fun();
}
}, 3000);
}
function Promise(){
if(!this
instanceof Promise)
return;
var that =
this;
that.count =
0;
that.leng =
arguments.length;
that.finalCall =
false;
that.then =
function(fun){
that.finalCall =
true;
that.fun =
fun;
};
for(var
i = 0;
i < that.leng;
i++){
arguments[i](that);
}
}
new Promise(ajax1,
ajax2, ajax3).then(function(){
console.log('I am final!');
});
代码难度不大,所以就不解释了。这个实现方案我并不是很满意,若有其它思路,愿意和我分享的话,希望你可以留言,互相学习一下拉~
ps:文章开头提到的文章,若你理解有困难,可以简单的这样理解。主要是通过
链式调用 和
回调函数的一种递归形式的调用。若留言指出有理解不正确的地方,我会十分开心!谢谢观看!
其次,这个问题来自于阿里一面的姐姐问道的。
当时我的回答是调用Promise函数来实现,面试姐姐希望我实现一下Promise函数,我回忆起阮一峰教程里是通过Generator函数实现的。但是面试姐姐更希望用javascript原生实现,我当时脑子一个懵,心里其实是有思路的,但是当时卡住不知道如何回答,哈哈。所以今天就整理了一下。
代码如下:
ac81
function ajax1(that){
setTimeout(function(){
console.log('I am ajax1!');
that.count++;
if(that.finalCall &&
that.count ===
that.leng){
that.fun();
}
}, 1000);
}
function ajax2(that){
setTimeout(function(){
console.log('I am ajax2!');
that.count++;
if(that.finalCall &&
that.count ===
that.leng){
that.fun();
}
}, 2000);
}
function ajax3(that){
setTimeout(function(){
console.log('I am ajax3!');
that.count++;
if(that.finalCall &&
that.count ===
that.leng){
that.fun();
}
}, 3000);
}
function Promise(){
if(!this
instanceof Promise)
return;
var that =
this;
that.count =
0;
that.leng =
arguments.length;
that.finalCall =
false;
that.then =
function(fun){
that.finalCall =
true;
that.fun =
fun;
};
for(var
i = 0;
i < that.leng;
i++){
arguments[i](that);
}
}
new Promise(ajax1,
ajax2, ajax3).then(function(){
console.log('I am final!');
});
代码难度不大,所以就不解释了。这个实现方案我并不是很满意,若有其它思路,愿意和我分享的话,希望你可以留言,互相学习一下拉~
ps:文章开头提到的文章,若你理解有困难,可以简单的这样理解。主要是通过
链式调用 和
回调函数的一种递归形式的调用。若留言指出有理解不正确的地方,我会十分开心!谢谢观看!
相关文章推荐
- 基于JavaScript实现一定时间后去执行一个函数
- JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
- JavaScript, 函数是实现异步的基础
- JavaScript 避免同步地调用异步函数的回调函数
- JavaScript是单线程运行的,但是ajax是如何实现的异步函数回调的?
- 异步函数顺序执行的实现
- JavaScript实现同时调用多个函数的方法
- javascript实现根据函数名称字符串动态执行函数的方法示例
- ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)
- javaScript 自执行函数—保留异步方法调用的内部变量
- 浅析javascript异步执行函数导致的变量变化问题解决思路
- JavaScript实现同时调用多个函数的方法
- JavaScript实现当网页加载完成后执行指定函数的方法
- 关于setTimeout()的延时执行,JavaScript的异步、匿名函数、函数声明、函数表达式
- 实现javascript的延期执行或者重复执行的两个函数
- JavaScript中的自执行函数和闭包实现过程
- javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
- 模仿TMALL搜索,下拉提示 优化 用户keypress停顿200毫秒间隔时,在执行异步取数据操作 通过underscore的函数debounce来实现
- JavaScript队列函数和异步执行详解
- javascript异步执行函数导致的变量变化问题解决思路