nodejs 异步转同步

时间: 2018-04-16阅读: 2727标签: 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

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/637

为什么NodeJS那么流行?

Node.js用于创建和运行各种类型的Web应用程序,这与其他一些框架类似。在Nodejs开发中,JavaScript用作主要语言。该节点程序包管理器(NPM)具有由轻量级的内置Web服务器,它允许您自定义应用程序构建满足您的需求管理插件过量。

Node.js FS模块方法速查

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

nodejs的jekins部署

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

Nodejs中ES Modules如何操作运用?

虽然已在最新的 LTS v12.17.0 中支持,但是目前仍处于 Stability: 1 - Experimental 实验阶段,如果是在生产环境使用该功能,还应保持谨慎,如果在测试环境可以安装 n install v12.17.0 进行尝试。

NodeJS沙盒逃逸研究

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

快速理解 nodejs 模块

module.exports 用于暴露一个值,这个值默认是对象,也可以覆盖为原始值。尝试在一个文件中直接 log 出 module 的值,可以得到:你需要通过修改 module 的 exports 属性来输出你需要输出的东西,而 require 用于导入一个模块

Ubuntu 上 Node.js 安装和卸载

Ubuntu 安装 Node.Js:执行检查可更新的软件,先用普通的apt工具安装低版本的node,然后再升级最新。更换淘宝的镜像,这个是必须的,用过的node的人都知道。安装更新版本的工具N

node.js如何删除注册表?

注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。

nodejs 文本逐行读写功能的实现

利用nodejs实现:逐行读写(从一个文件逐行复制到另外一个文件);逐行读取、处理和写入(读取一行,处理后,写入另一个文件)1.所需要的模块: fs,os,readline。功能的实现:readWriteFileByLine.js,功能的调用:index.js

Node 引入 ESM 新方案

Node 对 ES6 Module 的支持又有新进展。一个新的 PR 更新了当前 --experimental-modules 的实现方案。type 动态判断模块加载模式:更新后的方案将根据 package.json 文件中指定的 type 值来判断 js 文件是使用 ESM 还是 commonjs

点击更多...

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

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

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广