Promise摘要笔记

  1. Why Promise
     
    • 避免回调地狱
    • 可链式调用
    • 支持try catch语法
    • 有catch链式方法
  2. ajax调用
     
    function getData(url, success, fail) {
        var ajaxRequest = new XMLHttpReqeust();
        ajaxRequest.open('GET', url);
        ajaxRequest.onreadystatechange = function() {
            if(this.readystate !== 4) { return; }
            if(this.status === 200) {
                success(this.response);
            } else {
                fail(new Error(this.statusText));    
            }
        } 
        ajaxRequest.send();
    }
  3. 实例化 

    var promsie = new Promise(function(resolve, reject){})
  4. 将回调函数转化成Promise

    Callback:
    var callbackFun = function(cb) {
        setTimeout(function(){
            cb();
        }, 1000);
    }

    Promise:

    var promise = function() {
        return new Promise(function(resolve, reject) {
            setTimeout(function() {
                resolve();
            }, 1000)
        });
    }
    
    promise().then(function(){
        cb();
    });

  5. 手写node.js的util.promisify()方法
    • util.promisefy方法
       
      // fs.readFile
      var fs = require('fs'); // Commonjs
      fs.readFile('./text.json', 'utf-8', function(err, res){
          console.log(res);
      });
      
      //util.promisify()
      var readFilePromise = require('util').promisify(fs.readFile);
      readFilePromise('./text.json', 'utf-8').then(function(res) {
          console.log(res);
      }, function(err) {console.error(err)});
      
    • 手写promisify
       
      var fs = require('fs');
      
      var promisify = function(fun) {
          return function(...args) {
              return new Promise(function(resolve, reject) {
                  args.push(function(err, res) {
                      if(err) reject(err);
                      resolve(res);
                  })
                  fun.apply(fun, args);
              });
          }
      }
      
      var readFilePro = promisify(fs.readFile);
      readFilePro('./promise-test.js', 'utf-8').then(function(res) {
          console.log("test");
          console.log(res);
      })

       
  6. Promise规范摘要
    • 三种状态:等待(pending), 已完成(fulfilled), 已拒绝(rejected)
    • thenable: then方法return一个promise; then可被调用多次;
  7. Promise静态方法
    • Promise.resolve()
    • Promise.reject()
    • Promise.all([promise1, promise2])
    • Promise.race()
  8. 面试题测试
     
    //Q: 给出以下代码的输出
    
    var promise = new Promise(function(resolve, reject){reject();})
    promise.then(null, function() {
        console.log('promise status is rejected');
        return 123 
    })
    .then(null, null)
    .then(null, null)
    .then(function(res) {
        console.log(res);
        console.log("promise status is completed");
    }, function(e) {
        console.log(e);
        console.log("promise status is rejected finally");
    });
    
    //Output is:
    //    promise status is rejected
    //    123
    //    promise status is completed

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值