最基本的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. 刷题33. Search in Rotated Sorted Array

    一.题目说明 这个题目是33. Search in Rotated Sorted Array,说的是在一个"扭转"的有序列表中,查找一个元素,时间复杂度O(logn). 二.我的解 ...

  2. strpos用法

    语法 strpos(string,find,start) 参数 描述 string 必需.规定要搜索的字符串. find 必需.规定要查找的字符串. start 可选.规定在何处开始搜索.   技术细 ...

  3. UVA-10074 最大子矩阵 DP

    求出大矩阵里面全为0的最大子矩阵 我自己用的个挫DP写的,感觉写的不是很好,其实可以再优化,DP想法就是以 0 0 到当前 i j 为整体矩阵考虑,当前 i j就是从 i-1 j或者 i,j-1那里最 ...

  4. 题解 P4942 【小凯的数字】

    题目 为什么看到很多题解区的 dalao 都用逆元?是我太菜了吧 [分析] 首先,根据弃九验算法的原理,显然可以得到:一个 \(n\) 位数 \(a_1a_2a_3\dots a_n\equiv a_ ...

  5. dotnet core 链接mongodb

    导入命名空间 using MongoDB.Bson; using MongoDB.Driver; 测试示例: var client = new MongoClient("mongodb:// ...

  6. 886A. ACM ICPC#均值分配问题(暴力)

    题目出处:http://codeforces.com/problemset/problem/886/A 题目大意:已知六个人得分,问是否能分成两个三人队使得每个队伍得分加和相等 #include< ...

  7. Python 学习笔记:根据输入年月获取该月的第一天和最后一天

    目的: 给定一个时间,比如:2020.02,要求返回所输入月份的第一天及最后一天,比如:('2020.02.01', '2020.02.29') 参考博客:https://blog.csdn.net/ ...

  8. 【YOLO学习】召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))

    摘要 在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall,IoU等等.为了怕以后忘了,现在把自己对这几种度量方式的理解记录一下. 这一文章首先假设一个测试集,然后围绕这一测 ...

  9. python 多维数组 字典

    #多维数组list = [[87,57,98],[34,87,90]]print(list[1][0]) l = [[87,57,98],[34,87,[90,99,67]]]print(l[1][2 ...

  10. linux查看显卡

    查看 nvidia 显卡 $ lspci | grep -i nvidia 02:00.0 3D controller: nVidia Corporation Device 1023 (rev a1) ...