最基本的async 包

ApCollection.find({}).toArray(function (err, aps) {
var num = 0;
async.whilst(
function () {
return num++ < aps.length;
},
function (callback) {
if (aps[num]) {
var apmac = aps[num].AP_MAC;
ApHeartCollection.findOne({ AP_MAC: apmac, time: { $gte: nowtime } }, function (err, log) {
ApCollection.update({ _id: aps[num]._id }, { $set: { c: 2 } }, function (err, doc) {
callback(); })
})
}
else {
callback();
}
},
function (err) {
console.log('finish server status update');
})
})

用 async/await+promise

async function changeApServerStatus() {
var nowtime = new Date().getTime() / 1000;
var pro = tool.GetDB();
await pro;
await pro.then(function(args: any) {
return new Promise(function(resovle, reject) {
args.db.collection('ap').distinct('mac', function(err, macs) {
if (!err) {
args.macs = macs;
resovle(args);
}
reject(err);
})
})
}).then(function(args: any) {
var macs: Array<string> = args.macs
var num = 0;
var ApCol = args.db.collection('ap')
return myasync.whilst(
function() { return num < macs.length; },
function() {
return new Promise(function(resovle, reject) {
ApCol.findOne({ mac: macs[num] }, function(err, ap) {
num++;
if (!err) {
resovle(ap);
}
reject(err);
})
}).then(function(ap: any) {
console.log(num)
if (ap.datastatus == 0) {
console.log("is 0")
return new Promise(function(resovle, reject) {
ApCol.update({ mac: ap.mac }, { $set: { c: 2 } }, function(err, doc) {
console.log("update " + doc);
resovle(doc)
})
})
}
console.log("is 1")
})
}
)
})
}

换种方式 只是迭代里换了

async function changeApServerStatus() {
var nowtime = new Date().getTime() / 1000;
var pro = tool.GetDB();
await pro;
await pro.then(function(args: any) {
return new Promise(function(resovle, reject) {
args.db.collection('ap').distinct('mac', function(err, macs) {
if (!err) {
args.macs = macs;
resovle(args);
}
reject(err);
})
})
}).then(function(args: any) {
var macs: Array<string> = args.macs
var num = 0;
var ApCol = args.db.collection('ap')
async function iter(mac) {
var pap
await new Promise(function(resolve, reject) {
ApCol.findOne({ mac: mac }, function(err, ap) {
num++;
if (!err) {
pap = ap
resolve(ap)
}
reject(err)
})
})
await (function() {
console.log(num+" "+mac)
if (pap.datastatus == 0) {
console.log("is 0")
return new Promise(function(resolve, reject) {
ApCol.update({ mac: pap.mac }, { $set: { c: 2 } }, function(err, doc) {
console.log("update " + doc);
resolve(doc)
})
})
}
console.log("is 1")
})()
}
return myasync.whilst(
function() { return num < macs.length; },
function() {
return iter(macs[num])
}
)
})
}

async/await迭代器实现

var whilst = async function(test, callback) {
while (test()) {
await callback();
}
return "end"
};

async的迭代器

function whilst(fntest, fniterator, fnend) {
if (fntest()) {
fniterator(function (err) {
if (err) {
fnend(err)
}
whilst(fntest, fniterator, fnend)
})
} else {
fnend()
}
}

async包 ES6 async/await的区别的更多相关文章

  1. ES6 async await

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ES6 Generator vs ES6 async/await

    ES6 Generator vs ES6 async/await next yield promise refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允 ...

  3. JS学习- ES6 async await使用

    async 函数是什么?一句话,它就是 Generator 函数的语法糖. 使用场景常常会遇到,请求完一个接口,拿完值再去请求另外一个接口,我们之前回调callback函数处理,如果很多的情况下,看起 ...

  4. [转] Scala Async 库 (Scala future, await, async)

    [From] https://colobu.com/2016/02/15/Scala-Async/ 在我以前的文章中,我介绍了Scala Future and Promise.Future代表一个异步 ...

  5. ES6——async函数

    目录 1.async 函数是 Generator 函数的语法糖. 2.async函数对 Generator 函数的改进,体现在以下四点. 3.基本用法 一个获取股票报价的函数 指定多少毫秒后输出一个值 ...

  6. ES6和CommonJS的区别 以及 export和module.exports的区别

    ES6和CommonJS的区别 Javascript javascript是一种脚本编程语言,有自己独立的语法与语义,没有javascript,也就没有其他的那些概念了. ES6 JavaScript ...

  7. angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )

    Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...

  8. ES6 async await 面试题

    转自:https://juejin.im/post/5c0397186fb9a049b5068e54 1.题目一 async function async1(){ console.log('async ...

  9. ES6 async 与 await 实战

    下面来说一说通过async和await方式来辅助请求和封装 首先我们定义一个类,定义一个async方法,才可以使用await class JForm extends React.Component { ...

随机推荐

  1. Ubuntu16.04编译tensorflow的C++接口

    原文:https://www.bearoom.xyz/2018/09/27/ubuntu1604buildtf4cpp/ 之前有一篇介绍到在windows下利用VS2015编译tensorflow的C ...

  2. Vue 集成环信 全局封装环信WebSDK 可直接使用

    2019-11-25更新 npm install --save easemob-websdk请直接使用官方安装方式即可.import WebIM from 'easemob-websdk' 以下是最开 ...

  3. 2019牛客暑期多校训练营(第七场)A.String【最小表示法】

    传送门:https://ac.nowcoder.com/acm/contest/887/A 题意:大意就是给你一个只含有0和1的字符串,找出一种分割方法,使得每个分割出的字符串都是在该字符串自循环节中 ...

  4. 03 Mybatis:05.使用Mybatis完成CRUD

    mybatis框架:共四天 明确:我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式.不管使用XML还是注解配置. 第二天:mybatis基本使用 mybatis的单表crud操作 ...

  5. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第二天】

    淘淘商城(SpringMVC+Spring+Mybatis)  是传智播客在2015年9月份录制的,几年过去了.由于视频里课上老师敲的代码和项目笔记有些细节上存在出入,只有根据日志报错信息作出适当的调 ...

  6. ZJNU 1217 - 航线问题——高级

    将所有航线的其中一边排序后,另一边进行类dp 定义一个数组c,c[i]表示在所有能够开通i条航线的组合中,位置序号最大的那条航线的序号的最小值 比如下面一个样例 1 3 2 4 3 1 4 2 此时对 ...

  7. JavaSE--Java 的基本程序设计结构

    Java 对大小写敏感 Java 中定义类名的规则很宽松.名字必须以字母开头,后面可以跟字母和数字的任意组合.长度基本上没有限制.但是不能使用 Java 保留字作为类名. 标准的命名规范为:类名是以大 ...

  8. dubbo使用Spring配置暴露服务和使用Spring配置引用远程服务

    提供者: <!-- 1.指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) --> <dubbo:application name="user-servic ...

  9. shell手册

    摘自雪松同学 0说明{ # shell实例手册最新下载地址: http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9 # pytho ...

  10. Rnotebook中用python画图

    如果notebook需要转化为pdf, 能想到办法是保存图片文件,嵌入mardown语法中. 但是如果在html中显示, 可以考虑下面思虑, 比较取巧. ``` {python, engine.pat ...