自已实现的async 只实现了一部分功能
不得不说,人和人的技术确实有差距,同样的功能,其他人就是有办写写的更优雅性能更好
不论是C还是js
自已有功能但看着也比人家的丑好多。
- //最终效果 同async
- //目前实现了个人最常用的 serial 和 waterfall
- //实现waterfall
- // async.waterfall([
- // function(callback){
- // callback(null, 'one', 'two');
- // },
- // function(arg1, arg2, callback){
- // callback(null, 'three');
- // },
- // function(arg1, callback){
- // // arg1 now equals 'three'
- // callback(null, 'done');
- // }
- // ], function (err, result) {
- // // result now equals 'done'
- // });
- var async = (function () {
- //这个比较简单
- function whilst(fntest, fniterator, fnend) {
- if (fntest()) {
- fniterator(function (err) {
- if (err) {
- fnend(err)
- }
- whilst(fntest, fniterator, fnend)
- })
- } else {
- fnend()
- }
- }
- //后一项作为前一项的最后一列参数 只用修改next指向
- function serial(tasks, endcallback) {
- function makeCallBack(index) {
- var hasnext = (index < tasks.length);
- if (hasnext) {
- var fn = function () {
- var args = Array.prototype.slice(arguments)
- var next = makeCallBack(index + 1)
- args.push(next)
- tasks[index].apply(null, args)
- }
- fn.hasNext = hasnext
- return fn
- } else return function () {
- endcallback()
- }
- }
- makeCallBack(0)()
- }
- function waterfall(tasks, endcallback) {
- function makeCallBack(index) {
- var hasnext = (index < tasks.length);
- if (hasnext) {
- var fn = function () {
- //现在需要错误处理,如果第一项参数为err 则endcallback
- //arguments 也要从第一项开始过滤
- var args = Array.prototype.slice(arguments, 1)
- if (arguments[0]) {
- endcallback(arguments[0], null)
- endcallback = null
- } else {
- var next
- if (index + 1 == tasks.length) {
- next = endcallback
- } else {
- next = makeCallBack(index + 1)
- // args.push(next);
- }
- //这样只是把后一项函数,接在前一项之后。
- //而前一项函数的其他参数,后一项并不能得到。
- //把下一项调用的参数加到arg的前面
- for (var key in arguments) {
- if (key != "0") {
- args.push(arguments[key]);
- }
- }
- args.push(next);
- tasks[index].apply(null, args)
- }
- }
- return fn
- }
- //这样只是调用end方法,不能传参,要传参,需要向之前一样,把后一项接到tasks最后一项的callback上
- // else return function () {
- // //返回 result
- // endcallback(null)
- // }
- }
- //这样是直接调用返回的函数,下一个函数再调用下一个。
- //怎么把前一项的多余参赛传到下一项?
- makeCallBack(0)()
- }
- return {
- waterfall: waterfall,
- serial: serial,
- whilst: whilst
- }
- })()
- async.serial([
- function (callback) { console.log("1"); callback() },
- function (callback) { console.log("2"); callback() },
- function (callback) { console.log("3"); callback() }
- ], function () {
- console.log("end")
- })
- async.waterfall([
- function (callback) { console.log("1"); callback(null, "a"); },
- function (arg1, callback) { console.log("arg1" + arg1); console.log("2"); callback(null, "err3", "d"); },
- function (arg1, arg2, callback) { console.log("3"); callback(null, "res"); }
- ], function (err, result) {
- console.log("end");
- console.log(result);
- })
- var count = 0;
- async.whilst(
- function () { return count < 10; },
- function (callback) {
- count++;
- console.log(count)
- setTimeout(callback, 100);
- },
- function (err) {
- // 5 seconds have passed
- }
- );
- //迭代器
- // (function () {
- // function getiter(tasks) {
- // var i;
- // for (i = 0; i < tasks.length; i++) {
- // (function (index) {
- // var hasnext = ((index + 1) < tasks.length);
- // tasks[index].hasNext = hasnext;
- // console.log(index + " " + tasks[index].hasNext)
- // if (tasks[index].hasNext) {
- // tasks[index].next = tasks[index + 1]
- // }
- // })(i)
- // }
- // return tasks[0]
- // }
- // var tasks = [
- // function () { console.log("1") },
- // function () { console.log("2") },
- // function () { console.log("3") },
- // function () { console.log("4") },
- // ]
- // var task = getiter(tasks)
- // while (task.hasNext) {
- // task();
- // task = task.next;
- // }
- // })()
自已实现的async 只实现了一部分功能的更多相关文章
- img只显示图片一部分 或 css设置背景图片只显示图片指定区域
17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...
- Excel只想显示一部分日期,怎样把其余部分隐藏起来?
问题:只想显示一部分日期,怎样把其余部分隐藏起来? 方法:分列 Step1:选中需要修改的单元格——数据——分列. Step2:固定宽度——点击下一步. Step3:在建立分列处单击鼠标(若想取消 ...
- 两种方法实现用CSS切割图片只取图片中一部分
切割图片这里不是真正的切割,只是用CSS取图片中的一部分而已,主要有两种方式,一是做为某一元素的背景图片,二是用img元素的属性.下面有个不错的示例,大家可以参考下 切割图片这里不是真正的切割,只是用 ...
- iOS UIImageView 显示不规则图片只显示图片一部分保证图片不被压缩
//只需如下设置imageView [picImg setContentScaleFactor:[[UIScreenmainScreen] scale]]; picImg.contentMode = ...
- mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...
- CAsyncSocket只传输了一部分数据(UDP),后面是乱码
void CCAsyncSocketDlg::OnBnClickedBtnSend() { UpdateData(TRUE); TCHAR ipstr[INET_ADDRSTRLEN]; DWORD ...
- 关于aspxgridview里面过长内容只显示的一部分的处理方案
protected void g_Message_CustomColumnDisplayText(object sender, ASPxGridViewColumnDisplayTextEventAr ...
- DataGrid列中加入CheckBox 全选 点击Header全选 和 只操作选中部分 功能的实现
先写个效果 中午接着写 反正没人看 只是给自己记录
- TensorFlow从1到2(十五)(完结)在浏览器做机器学习
TensorFlow的Javascript版 TensorFlow一直努力扩展自己的基础平台环境,除了熟悉的Python,当前的TensorFlow还实现了支持Javascript/C++/Java/ ...
随机推荐
- 【freemaker】之自定义指令<#macro>
测试代码 @Test public void test07(){ try { root.put("name", "张三"); freemakerUtil.fpr ...
- [系统集成] OpenLDAP使用AD密码
关于OpenLDAP和AD帐号的整合,网上有大量的文档,绝大多数都不符合我们的需求,下面的方案是我经过调研.测试.修改.最终采用的. . 需求概述 公司网络中有两种帐号:OpenLDAP帐号和AD帐号 ...
- 【AT91SAM3S】ADC中断方式采集数据
板子依旧是英倍特的EK-SAM3S.ADC部分的原理图如下: PB1是一个复用引脚,在这里被用作AD功能,对应芯片上的AD5.即,使用片内ADC的5通道测VR1上2号引脚的电压. 实验采用了SysTi ...
- 相机标定:关于用Levenberg-Marquardt算法在相机标定中应用
LM算法在相机标定的应用共有三处. (1)单目标定或双目标定中,在内参固定的情况下,计算最佳外参.OpenCV中对应的函数为findExtrinsicCameraParams2. (2)单目标定中,在 ...
- 手把手教你接口自动化测试 – SoapUI & Groovy
手把手教你接口自动化测试 – SoapUI & Groovy http://www.cnblogs.com/wade-xu/p/4236295.html 关键词:SoapUI接口测试,接口自动 ...
- (转)SVN 服务端、客户端安装及配置、导入导出项目
SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...
- history 查看历史操作记录在shell脚本执行中无法显示问题
今天使用shell脚本想查看历史操作命令的记录于是写了一个再简单不过的脚本,可是以chmod +x 权限执行./test.sh发现执行后没有任何反应.于是查找原因:将脚本文件中的#!/bin/bash ...
- Spark Streaming 事务处理彻底掌握
本期内容: 1. Exactly once容错 2. 数据输出不重复 一. 事务场景 : 以银行转帐一次为例,A用户转账给B用户,如何保证事务的一致性,即A用户能够转出且只能转出一次,B用户能够收到且 ...
- Angular $http解析通过接口获得的json数据
刚接触angular不久,对很多东西都不了解,今天需要用angular通过接口得到json数据,折腾了好久,总算是能获取到数据了,下面是部分源码,仅供参考: HTML部分: <body ng-a ...
- information_schema系列二(列,列权限,事件,存储引擎)
这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益. 1:COLUMNS 老规矩.查一下这个表,看一下记录,由于这个是看表 ...