亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

koa框架的yield問題

koa框架的yield問題

9玖月 2017-08-10 18:25:42
請導師或同學幫忙,解答一下,非常感謝!問題如下:問題1:為什么這里的yield下面?console.log()都能打印處理,這里并沒有調用next,按照es6的理解是需要手動調用next才會往下執行的???問題2:如果把?var content = yield util.parseXMLAsync(data);中yield去掉,打印處理則是一個Promise對象,如下所示:加上yield則打印出具體的內容,如下圖所示:在app.js文件有代碼如下:'use strict'var Koa = require('koa');var path = require('path');var util = require('./libs/util.js');var wechar = require('./wechar/g.js');var config = require('./config.js');var weixin = require('./weixin.js'); var wechar_file = path.join(__dirname,'./config/wechat.txt');var app = new Koa();app.use(wechar(config.wechat, weixin.reply));app.listen(3000);**********************************************/wechar/g.js代碼如下:'use strict'var sha1 = require('sha1');var Wechat = require('./wechat.js');var getRawBody = require('raw-body');var util = require('./util.js');module.exports = function(opts, handler){ ? ?var wechat = new Wechat(opts); ? //在測試發送方式get/post時,可以先屏蔽掉 ? ?return function *(next) { ? ? ? ?var that = this; ? ? ? ?var token = opts.token; ? ? ? ?var signature = this.query.signature; ? ? ? ?var nonce = this.query.nonce; ? ? ? ?var echostr = this.query.echostr; ? ? ? ?var timestamp = this.query.timestamp; ? ? ? ?var str = [token, timestamp, nonce].sort().join(''); ? ? ? ?var sha = sha1(str); ? ? ? ?if(this.method === 'GET'){ ? ? ? ? ? ?if (sha === signature && echostr) { ? ? ? ? ? ? ? ?this.body = echostr + ''; ? ? ? ? ? ? ? ?//console.log(echostr); ? ? ? ? ? ? ? ?return; ? ? ? ? ? ?} else { ? ? ? ? ? ? ? ?this.body = 'wrong --- echostr的驗證出錯!';? ? ? ? ? ? ? ? ?return; ? ? ? ? ? ?} ? ? ? ?} ? ? ? ?else if (this.method === 'POST'){ ? ? ? ? ? ?if (sha !== signature){ ?? ? ? ? ? ? ? ? ?this.body = 'wrong --- signature不匹配??!'; ? ? ? ? ? ? ? ?return false; ? ? ? ? ? ?} ? ? ? ? ? ?var data = yield getRawBody(this.req, { ? ? ? ? ? ? ? ?length: this.length, ? ? ? ? ? ? ? ? ? ? ?limit: '1mb', ? ? ? ? ? ?? ? ? ? ? ? ? ? ?encoding: this.charset, ? ? ? ? ? ? ?}); ? ? ? ? ? ? ? ? ?var content = yield util.parseXMLAsync(data); ? ? ? ? ? ?console.log(content);?????????? var message = yield util.formatMessage(content.xml);????????? console.log(message);? ? ?? } ? ?}}*************************************************************************./util.js代碼如下:'use strict'var xml2js = require('xml2js'); ?? var Promise = require('bluebird'); var tpl = require('./tpl.js');//解析xml格式的數據exports.parseXMLAsync = function (xml) { ? ?return new Promise(function (resolve, reject) { ? ? ? ?xml2js.parseString(xml, {trim:true}, function (err,content) { ? ? ? ? ? ?if (err) reject(err); ? ? ? ? ? ?else resolve(content); ? ? ? ?}); ? ?});}
查看完整描述

1 回答

  • 1 回答
  • 1 關注
  • 1912 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號