美文网首页
Promise的连续then写法

Promise的连续then写法

作者: 凡凡的小web | 来源:发表于2019-08-28 18:07 被阅读0次
var http = require('http');  
var fs = require('fs');  
  
http.createServer(function(req,res){  
  if (req.url=='/') {  
    getTitles(res);  
  }  
}).listen(80,function(){  
  console.log('server start..');  
});  
  
function getTitles(res){  
  var titles;  
  get_file_content('/tpl/title.json') // 先抓取数据文件  
  .then(JSON.parse)  // 这里顺便做一下解析,让我们尽情滥用node的异步吧!!  
  .then( function(value){  
    titles = value;  // 把局域变量保存到上一层变量。  
    return '/tpl/template.html';//给下一个文件请求then传参  
  }).then(  
    get_file_content             // 再抓取模板文件  
  ).then(function (tmpl){ // tmpl是上一个promis的输出  
      formatHtml(titles,tmpl, res); // 调用函数全部搞定  
    }  
  ).catch( function (err) {  
    hadError(err, res);          // 调用处理错误的函数。  
  });  
}  
  
// 这是通用函数,异步读文件  
function get_file_content(file)  
{  
  return new Promise(function (resolve, reject) {  
    fs.readFile(__dirname+file, function(err,data){  
      if (err) {  
        reject(err);  
      } else {  
        resolve(data.toString() );  
      }  
    });  
  });  
}  
  
  
//这是本程序主要逻辑,模板替换后,输出  
function formatHtml(titles,tmpl, res) {  
  var html = tmpl.replace('%', ' <li > ' +titles.join('</li > <li >') +' </li > ' );  
  res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});  
  res.end(html);  
}  
  
// 通用的错误处理函数  
function hadError(err, res) {  
  console.log(err);  
  res.end('server error.');  
}  

原文https://www.iteye.com/blog/xieye-2400567

相关文章

网友评论

      本文标题:Promise的连续then写法

      本文链接:https://www.haomeiwen.com/subject/ngbmectx.html