nodejs 异步转同步

时间: 2018-04-16阅读: 599标签: node

nodej项目在微信环境开发,需要获取access_token进行授权登录和获取用户信息。特意把这块功能拿出来封装一个自定义module

module.exports = new Wechat(con.appid, con.secret, con.url);


之前appid和secret是在本地配置文件写死的,后来要求系统后台可以配置公众号。就需要从后台请求来获取配置参数。这就遇到问题了。

var wechat = require('./modules/wechat');
var rule = new schedule.RecurrenceRule();
//rule.hour  = [0,2,4,6,8,10,12,14,16,18,20,22];
rule.minute = 0;
var j = schedule.scheduleJob(rule, function(){
     wechat.getBaseTokenForever();
 }); 
wechat.getBaseTokenForever();


我的服务会在开启以及每小时来获取新的access_token,并存入数据库,以保证其是一直有效的,用来控制请求次数不会超额。后来模块改为

var data = {};
    request({
        url: con.url + '/路由',
        method: "POST",
        json: true,
        body: {}
    }, function (err, response, body) {
        if (err || body.code != 0) {
            console.log('获取公众号配置失败 '+ Date());
        } else {
            console.log('获取公众号配置 '+ Date());
            data = body.data;
        }
    });

module.exports =  function () {
    return new Wechat(data.appid, data.secret, con.url);
};


但是nodejs的异步特效,会导致请求没有完成就执行下面的代码,出现错误。经过多方查找,可以使用async模块来异步转同步,只有前一个function执行callback,下一个才会执行。 

var async = require('async');
async.waterfall([
    function(callback){
        getWechat();
        function getWechat() {
            if(!wechat().appid){
                setTimeout(function () {
                    getWechat();
                },1000);
                console.log(wechat());
            } else {
                callback(null,wechat())
            }
        }
    },
    function(wechat, callback){   
     var rule = new schedule.RecurrenceRule();
        //rule.hour  = [0,2,4,6,8,10,12,14,16,18,20,22];
        rule.minute = 0;
        var j = schedule.scheduleJob(rule, function(){
            wechat.getBaseTokenForever();
        });
        wechat.getBaseTokenForever();
        callback(null)
    }
], function(err, results){
    console.log(err)
});


来源:https://www.cnblogs.com/gxp69/archive/2018/04/15/nodejs.html

NodeJS沙盒逃逸研究

在这篇文章中,我们将探讨如何使用解释器的内部结构来逃离NodeJS沙箱。Node.js不是一个JavaScript框架,不同于CakePHP、Django、Rails。Node.js更不是浏览器端的库,不能与jQuery、ExtJS相提并论。

Node.js FS模块方法速查

所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API,异步方式其最后一个参数是回调函数。回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能是null或者undefinded。

如何让 node 运行 es6 模块文件,及其原理

最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机制。而现在我们很多项目都是用 es6 的模块化规范来写代码的,包括 node 项目

nodejs的jekins部署

gitlab项目仓库给jekins服务器分配一个账号develop权限用于拉取代码。分支为master。jekins配置打包脚本。思路就是拉取最新代码后,安装相关依赖。删除旧打包文件。新建打包文件项目名.tar.gz。通过SSH传输打包文件项目名.tar.gz到测试服务器指定目录。

NodeJs实现简单的爬虫

爬虫,是一种按照一定的规则,自动地抓取网页信息的程序或者脚本;利用NodeJS实现一个简单的爬虫案例,脚本所用到的nodejs模块。express 用来搭建一个服务,将结果渲染到页面, swig模板引擎,cheerio用来抓取页面的数据

node.js反向代理的实现

在实际工程开发中,会有前后端分离的需求。使用node.js反向代理的目的:实现前后端分离,前端减少路径请求的所需的路由文件;通过http-proxy-middleware中间件、Http Proxy 模块这2种方式实现node.js的反向代理

使用 Node.js 开发简单的脚手架工具

像我们熟悉的 vue-cli,react-native-cli 等脚手架,只需要输入简单的命令 vue init webpack project,即可快速帮我们生成一个初始项目。在实际工作中,我们可以定制一个属于自己的脚手架,来提高自己的工作效率。

Kotlin + Node.js 搭建教程

Kotlin是JetBrains推出的一款语言, 相比Java有更简洁的语法, 能编译为Java Class, 也能编译为JavaScript Node.js则是可以运行在服务端的JavaScript, 这里把二者结合, 搭建一个用Kotlin编写的服务端应用

用node探究http缓存

用node搞web服务和直接用tomcat、Apache做服务器不太一样, 很多工作都需要自己做。缓存策略也要自己选择,虽然有像koa-static,express.static这些东西可以用来管理静态资源,但是为了开发或配置时更加得心应手,知其所以然,有了解http缓存的必要。另外,http缓存作为一个前端优化的一个要点,也应该有所了解。

node.js中常用的fs文件系统

node.js中常用的fs文件系统:fs文件系统模块对于系统文件及目录进行一些读写操作。模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告合作文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯