async包 ES6 async/await的区别
最基本的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的区别的更多相关文章
- ES6 async await
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ES6 Generator vs ES6 async/await
ES6 Generator vs ES6 async/await next yield promise refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允 ...
- JS学习- ES6 async await使用
async 函数是什么?一句话,它就是 Generator 函数的语法糖. 使用场景常常会遇到,请求完一个接口,拿完值再去请求另外一个接口,我们之前回调callback函数处理,如果很多的情况下,看起 ...
- [转] Scala Async 库 (Scala future, await, async)
[From] https://colobu.com/2016/02/15/Scala-Async/ 在我以前的文章中,我介绍了Scala Future and Promise.Future代表一个异步 ...
- ES6——async函数
目录 1.async 函数是 Generator 函数的语法糖. 2.async函数对 Generator 函数的改进,体现在以下四点. 3.基本用法 一个获取股票报价的函数 指定多少毫秒后输出一个值 ...
- ES6和CommonJS的区别 以及 export和module.exports的区别
ES6和CommonJS的区别 Javascript javascript是一种脚本编程语言,有自己独立的语法与语义,没有javascript,也就没有其他的那些概念了. ES6 JavaScript ...
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...
- ES6 async await 面试题
转自:https://juejin.im/post/5c0397186fb9a049b5068e54 1.题目一 async function async1(){ console.log('async ...
- ES6 async 与 await 实战
下面来说一说通过async和await方式来辅助请求和封装 首先我们定义一个类,定义一个async方法,才可以使用await class JForm extends React.Component { ...
随机推荐
- 分块&莫队模板
最裸的莫队:https://www.luogu.org/problemnew/show/P1494 #include<bits/stdc++.h> #define ll long long ...
- setAttribute 添加属性js_jq
属性js setAttribute document.getElementsByName("test")[0].setAttribute("src", &quo ...
- 第 10 章 gdb
一.参考网址 1.linux c编程一站式学习 二.命令列表 1.图1: 2.图2: 3.图3: 三.重点摘抄 1.断点与观测点的区别 我们知道断点是当程序执行到某一代码行时中断,而观察点是当程序访问 ...
- 201503-2 数字排序 Java
思路: 将出现过的数以及次数放进Map中,转成List,用Comparator就可以排序了.参数中o2-o1,与排序规则相反,为降序 import java.util.ArrayList; impor ...
- dotnet core 链接mongodb
导入命名空间 using MongoDB.Bson; using MongoDB.Driver; 测试示例: var client = new MongoClient("mongodb:// ...
- UML-如何画常用UML交互图?
1.生命线框图(参与者) 2.消息表达式
- numpy(二)
1.集合操作 包含去重,交,并,差集操作 2.排序.搜索和计数 sort,where,argmin,argmax,count_nonzero,argwhere 3.线性代数 np.linalg库,包含 ...
- webpack快速使用笔记
一.NPM1.NPM是随同NodeJS一起安装的包管理工具. http://www.1994july.club/?p=14542.安装npm install npm -gnpm -v 测试是否成功安装 ...
- python_pycharm控制台输出带颜色
一.书写格式: 设置颜色开始:\033[显示方式;前景色;背景色m] 结束:\033[0m 二.颜色参数: 前景色 背景色 颜色 ----------------------------------- ...
- python-day5爬虫基础之正则表达式2
dot: '.'匹配任意的字符 '*'匹配任意多个(0到多个) 如图所示, 程序运行结果是abc,之所以没有匹配\n,是因为\n是换行符,它就代表这个字符串是两行的,而正则表达式是一行一行去匹配的.在 ...