nodejs异步转同步
2018-06-24 01:55:18来源:未知 阅读 ()
项目在微信环境开发,需要获取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) });
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:JS事件覆盖问题和触发问题
- jQuery异步提交表单的两种方式 2020-03-12
- Javascript Ajax异步读取RSS文档具体实现 2020-02-25
- nodejs中如何使用async模块 2020-02-22
- nodejs的express自动生成项目框架的方法 2020-02-20
- JavaScript 异步调用 2020-02-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash