美文网首页
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