前后端分离开发,前端通过接口获取数据,但是有的页面不止一个接口,就会出现金字塔回调,可以通过 Promise 封装请求。
request-data.js:
function reqData(posturl,req,res,callback) {//请求用户数据 request({ url: con.url + posturl,method: "POST",json: true } }, (error,response,body) { if (!error && response.statusCode == 200) { callback(body.code,body.data,null); } else { callback(null,"error"); } }); } reqPostData(posturl,bodyData,1)"> },body: bodyData },1)">); } }); }
viewData.js:
引入数据请求模块 var requestData = require('./request-data'); getNoParam(postUrl,describe) { var describe = describe || '数据'; 创建Promise对象 var p = new Promise((resolve,reject){ 发送获取相应数据的请求 requestData.reqData(postUrl,1)"> (code,data,err) { if (code == 0) { 成功返回数据 resolve({Data:data}); } { 失败说明原因 reject(describe + "获取失败:" + data); } }); }); return p; } getWithParam(postUrl,postData,describe){ 发送获取相应数据的请求 requestData.reqPostData(postUrl,1)"> console.log(code,err); p; }
路由文件调用:
var viewData = require('../modules/viewData'/*商品列表*/ router.get('/list',1)"> (req,res) { Promise .all([viewData.getNoParam('/user/hot_list','热门列表'),viewData.getWithParam('/user/recommend_list',{id: req.query.id},'推荐列表')]) .then( (results) { res.render('index/pay_complet'0].Data,rm: results[1].Data }); },1)"> (reason) { console.log(reason); res.render('common/error',{title: '错误'