14-4.Promise总结

一.测试手写的Promise

  1. 安装插件
npm i promises-aplus-tests -D
  1. 修改package.json
// 添加一个脚本 

// ① test可自定义名称
// ② promises-aplus-tests 插件名
// ③ ./tomato/Promise 相对于package.json的文件路径
"scripts": {
    "test": "promises-aplus-tests ./tomato/Promise"
  },

  1. 修改我们的Promise.js
// 这里的Promise可以替换为你自己定义的构造函数名 
Promise.deferred = function () {
    var result = {};
    result.promise = new Promise(function (resolve, reject) {
        result.resolve = resolve;
        result.reject = reject;
    });

    return result;
}

module.exports = Promise;
  1. 在终端运行命令

# test可替换为你自定义的名称
npm run test

二.Promise A+ 规范

官网文档地址:https://promisesaplus.com/#notes

看了官方文档,前面的还挺好懂的,后面的有些晦涩。

个人理解,就是编写一个promise风格函数 的标准要求。

三.答题要点

  1. Promise的状态一经改变就不能再改变。

  2. .then.catch都会返回一个新的Promise

  3. catch不管被连接到哪里,都能捕获上层未捕捉过的错误。

  4. Promise中,返回任意一个非 promise 的值都会被包裹成 promise 对象,例如return 2会被包装为return Promise.resolve(2)

  5. Promise.then 或者 .catch 可以被调用多次, 但如果Promise内部的状态一经改变,并且有了一个值,那么后续每次调用.then或者.catch的时候都会直接拿到该值。

  6. .then 或者 .catchreturn 一个 error 对象并不会抛出错误,所以不会被后续的 .catch 捕获。

  7. .then.catch 返回的值不能是 promise 本身,否则会造成死循环。

  8. .then 或者 .catch 的参数期望是函数,传入非函数则会发生值透传。

  9. .then方法是能接收两个参数的,第一个是处理成功的函数,第二个是处理失败的函数,再某些时候你可以认为catch.then第二个参数的简便写法。

  10. .finally方法也是返回一个Promise,他在Promise结束的时候,无论结果为resolved还是rejected,都会执行里面的回调函数。

四.相关博客

  1. ECMAScript 6 入门 阮一峰
  2. B站总结的博客
  3. MDN-Promise
  4. 手把手一行一行代码教你“手写Promise“,完美通过 Promises/A+ 官方872个测试用例
  5. 45道Promise面试题一次爽到底

强烈建议 阅读一下45道Promise面试题一次爽到底这片博客,蛮不错的、

end

  • 剩余事项:

    • 手写一个class版本的promise 。

    • then方法实现异步,到底定时器好呢,还是微任务好呢?这个还没有完全理解。

方法中执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lazy_tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值