1. function myPromise(constructor) {
    2. let self = this;
    3. self.status = "pending"; //定义状态改变前的初始状态
    4. self.value = undefined; //定义状态为resolve的时候
    5. self.reason = undefined; //定义状态为reject的时候
    6. function resolve(value) {
    7. if (self.status === "pending") {
    8. self.value = value;
    9. self.status === "resolved";
    10. }
    11. }
    12. function reject(reason) {
    13. if (self.status === "pending") {
    14. self.reason = reason;
    15. self.status === "rejected";
    16. }
    17. }
    18. //捕获构造异常
    19. try {
    20. constructor(resolve, reject)
    21. } catch (e) {
    22. reject(e);
    23. }
    24. }
    25. myPromise.prototype.then = function (onFullfilled, onRejected) {
    26. let self = this;
    27. switch (self.status) {
    28. case "resolved":
    29. onFullfilled(self.value);
    30. break;
    31. case "rejected":
    32. onRejected(self.reason);
    33. break;
    34. default:
    35. }
    36. }
    37. // // 测试代码
    38. // var p=new myPromise(function(resolve,reject){resolve(1)});
    39. // p.then(function(x){console.log(x)})
    40. // //输出1