最基本的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. 洛谷 P1731 [NOI1999]生日蛋糕 && POJ 1190 生日蛋糕

    题目传送门(洛谷)  OR 题目传送门(POJ) 解题思路: 一道搜索题,暴力思路比较容易想出来,但是这道题不剪枝肯定会TLE.所以这道题难点在于如何剪枝. 1.如果当前状态答案已经比我们以前某个状态 ...

  2. Java 继承(extends)、抽象类(abstract)的特点用法原理(7)

    Java  中的继承 继承: java中的抽象类用法原理: /* 当多个类中出现相同功能,但是功能主体不同, 这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特 ...

  3. Ubuntu的奇技淫巧

    sudo apt-get install cmatrix 输入密码,安装后,按F11把terminal全屏,输入cmatrix -b sudo apt-get install sl 安装后执行sl,屏 ...

  4. 2019 Python工程师平均薪资22K,又涨了11.9%!

    转行的同学最关心的就是Python的薪资情况了.今天我们就来具体看一下Python现在的薪资情况. 这是一张网友统计的Python工程师工资情况图表.详细说明了现在Python工程师在各个城市的薪资情 ...

  5. 吴裕雄--天生自然 PHP开发学习:多维数组

    <pre> <?php // 二维数组: $cars = array ( array("Volvo",100,96), array("BMW" ...

  6. android studio 3.2 查看Deveice Monitor

    View菜单下面的 Tool Windows 下面的 Devecie File Explorer

  7. python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)

    默认参数:定义函数的时候给定变量一个默认值. def num(age=1): 位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用. 关键字参数:如果定义的函数中含有关键字参数,调用函数 ...

  8. windows下查看rabbitmq服务是否启动

    1.命令行进入rabbitmq的安装目录下: 如下图1步骤 2.输入命令 rabbitmqctl1 status 如下图2步骤 3.有时会提示报错,如步骤3 解决办法: 我的电脑 ==> 右键 ...

  9. windows下使用vs code调试简单的C程序

    常使用visual studio code(vs code)打开.c文件,如果让vs code具备调试技能估计会比较有用 准备工作: 1. vs code安装插件:cpptools 2. window ...

  10. flutter 命令卡主的问题

    情况 1 镜像的问题 如果你的镜像已经设置,却仍然卡主,那么请参考情况 2 这种情况在中文官网上已经有了,并且有这修改镜像的方法,附上链接: https://flutter.cn/community/ ...