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 { ...
随机推荐
- Dynamics CRM - 在 C# Plugin 里以 System Administrator 权限来更新 Entity
场景说明: 1.在使用 CRM 系统时,经常会有需要在某个 Entity 下对其他 Entity 的 Record 进行更新,或者在 post 中对自身进行更新,这里就需要用到 SDK 上的 upda ...
- vue整合外部js
vue引入外部jsimport { TrackLine } from "../../../../../static/js/trajectory.js";import { initM ...
- CMS-熊海网站内容管理系统漏洞测试
开门见山 在虚拟机中搭建网站,本机访问http://192.168.31.68/ 一.SQL注入获取管理员账号密码 1. 点开一篇文章,存在get请求参数 2. 手工注入无果,使用sqlmap,后跟- ...
- 题解 P4942 【小凯的数字】
题目 为什么看到很多题解区的 dalao 都用逆元?是我太菜了吧 [分析] 首先,根据弃九验算法的原理,显然可以得到:一个 \(n\) 位数 \(a_1a_2a_3\dots a_n\equiv a_ ...
- 你需要了解的JIT Debugging
原总结debug调试dump转储文件windbgprocdumpJIT Debugger 如果你还不清楚什么是转储文件,不知道什么时候需要转储文件,请参考转储文件系列文章的第一篇 -- 转储文件知多少 ...
- placeholder在IE下的兼容问题
最近写项目要求兼容到ie8,写完了去ie测试的时候,发现了placeholder在ie下的兼容问题,为了解决,搜罗网上各种牛人的解决方案,自己总结如下: css样式(设置各浏览器下placeholde ...
- tensorflow C++接口调用目标检测pb模型代码
#include <iostream> #include "tensorflow/cc/ops/const_op.h" #include "tensorflo ...
- MySQL--重定向输出内容
参考:http://www.cnblogs.com/emanlee/p/4233602.html select current_date() into outfile 'dest_path';
- 关于本人:-D(必读)
关于本人 本人目前从事iOS开发,但心中也有一个全栈的梦想,希望与大家共勉! 关于博客内容 自己会不时分享一些iOS方面的技术点.总结的一些经验及工具类.还有学习其他语言过程中的笔记.技术.总结及心得 ...
- B-树与B+树 两者的区别
一个m阶的B树具有如下几个特征: 根结点至少有两个子女. 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 每一个叶子节点都包含k-1个元素,其中 m/2 < ...