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/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()
        }
    }
时间: 2024-08-28 02:13:44

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

ES6 async await

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>async-await</title> 6 </head> 7 <body> 8 <h3>ES6 async 函数用法</h3> 9 10 <script> 11 12 wind

ES6 async/await语法

Async/await的主要益处是可以避免回调地狱(callback hell)问题 Chromium JavaScript引擎 从v5.5开始支持async/await功能,Chromium JavaScript引擎版本号的查看方法是:在浏览器地址栏输入 chrome://version,查询出来的信息如下图所示: 这意味着async/await不再是实验性功能,使用它时无需指定--harmony参数,此参数用来开启那些几乎已完成但被V8团队认为还不稳定的功能.不同的node版本使用不同的V8

JS学习- ES6 async await使用

async 函数是什么?一句话,它就是 Generator 函数的语法糖. 使用场景常常会遇到,请求完一个接口,拿完值再去请求另外一个接口,我们之前回调callback函数处理,如果很多的情况下,看起来很冗余,这时我们可以用async函数. 比如我们有两个请求,如下,这里用的axios: function getCode(){ return axios.get('json/code.json'); } function getlist(params){ return axios.get('jso

ES6——async函数

1.async 函数是 Generator 函数的语法糖. 一个 Generator 函数,依次读取两个文件. var fs = require('fs'); var readFile = function (fileName) { return new Promise(function (resolve, reject) { fs.readFile(fileName, function(error, data) { if (error) reject(error); resolve(data)

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

[From] https://colobu.com/2016/02/15/Scala-Async/ 在我以前的文章中,我介绍了Scala Future and Promise.Future代表一个异步计算,你可以设置你的回调函数或者利用Await.result等待获取异步计算的结果,你还可以组合多个future为一个新的future.Promise让你可以控制是否完成计算还是抛出异常,它的future方法返回一个Future对象,complete.success和failure允许你完成计算.如

Python 引入包的两种方式区别

1.import XXX仅仅是告诉我们需要使用这个包,但是你真正使用的时候,需要完整的导入这个包的全路径 比如: import wechat.views 在使用其中的hello函数的时候,需要 wechat.views.hello - 这个路径不能简略 2.from ... import ...就不需要指定父的路径了 比如: from wechat.views import *    #你可以使用views内部的变量 你就可以直接使用其中的hello hello 但是如果: from wecha

Redis(Windows安装方法与Java调用实例 &amp; 配置文件参数说明 &amp; Java使用Redis所用Jar包 &amp; Redis与Memcached的区别)

Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官方下载:http://redis.io/download 可以根据需要下载不同版本 windows版:https://github.com/MSOpenTech/redis github的资源可以ZIP直接下载的(这个是给不知道的同学友情提示下) 下载完成后 可以右键解压到 某个硬盘下 比如D:\R

TCP/IP协议栈与数据包封装+TCP与UDP区别

ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. TCP/IP参考模型的层次结构 TCP/IP协议栈是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型.ARPANET是由美国国防部(U.S.Department of Defense,Do

ES6 Async/Await 完爆Promise的6个原因

自从Node的7.6版本,已经默认支持async/await特性了.如果你还没有使用过他,或者对他的用法不太了解,这篇文章会告诉你为什么这个特性"不容错过".本文辅以大量实例,相信你能很轻松的看懂,并了解Javascript处理异步的一大杀器. 文章灵感和内容借鉴了6 Reasons Why JavaScript's Async/Await Blows Promises Away (Tutorial),英文好的同学可以直接戳原版参考. 初识Async/await 对于还不了解Async