您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    用Promise讲一个悲伤的故事给你听
    时间:2018-07-03 21:27 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    用Promise讲一个悲伤的故事给你听

    那天我正在学习 Promise,突然家里打电话过去说,家里盖房子要钱。我任务这么多年了,从事着别人眼中高薪任务,于是满口容许上去。但是由于我并没有钱,于是我跟家里说,等过几天我再打钱过去。我也好乘着这几天想想办法。

    首先我找到我的同窗李雷,他如今一个部门经理了,我想应该他应该有钱。我跟他阐明了借钱的意向,李雷二话不说就容许借我300,不过同时表示要回家跟老婆商量商量,我说好。此时我想起来容许或许说承诺的英文单词就是 Promise 。承诺的结果是钱,钱是数值(number 类型)。于是我想把我要借钱的这一行为写成一个 TypeScript 函数如下:

    // 向李雷借钱,李雷丢给我一个承诺 

    function borrowMoneyFromLiLei(): Promise<number> { 

      return new Promise<number>(function(fulfill, reject) { 

         // 李雷跟老婆商量中 

      }); 

    此时,我在想李雷老婆会容许给我借300块吗?我不确定,就像薛定谔的猫。借还是不借,这是一个成绩。然后我发现这也可以写成一个函数。借或许不借用布尔值来表示 (boolean 类型)。函数如下:

    // 李雷的老婆能否会容许给我借钱? 

    function willLiLeiWifeLendMeMoeny(): Promise<boolean> { 

      return new Promise<boolean>(function(lend, reject) { 

        // 借还是不借 

      }); 

    假设李雷借我钱了,我就转钱给家里,没有,我应该要再去找别人借了。可以用下面的函数描画我此时的处境。

    function transferMoneyToHome(money: number) { 

        // 给家里转钱 

    function mySituation(){ 

        borrowMoneyFromLiLei() 

        .then((money:number) => { 

            // 假设李雷借我钱了,我就转钱给家里. 

            transferMoneyToHome(money) 

        }).catch((reason) => { 

            // 李雷老婆拒绝借钱给我。 那我应该思索向其别人借了。 

            borrowMoneyFromOthers() 

        }) 

    找其别人借,我能想到就(张三,李四,五五)这三团体了,其他的冤家很少联络,突然说借钱也不好。于是我尝试向他们借钱。用代码表示是这样子的:

    function borrowMoneyFromOthers() { 

      // 我先试着向张三借 

      tryBorrowMoneyFromZhangshan() 

        .then(money => { 

          transferMoneyToHome(money); 

        }) 

        .catch(reason => { 

          // 假设张三不借,并丢给我一个理由 

          // 试着向李四借 

          tryBorrowMoneyFromLisi() 

            .then(money => { 

              transferMoneyToHome(money); 

            }) 

            .catch(reason2 => { 

              // 假设 李四也不肯错 

              // 再试试向王五借 

              tryBorrowMoneyFromWangwu() 

                .then(money => { 

                  transferMoneyToHome(money); 

                }) 

                .catch(reason => { 

                  // 没有人肯借 

                  throw new Error("我该怎样办呢?"); 

                }); 

            }); 

        }); 

    由于借着钱之后都是向家里转钱,所以下面的代码应该简化一下。简化后如下:

    function borrowMoneyFromOthers() { 

      // 我先试着向张三借 

      tryBorrowMoneyFromZhangshan() 

        .then(transferMoneyToHome) 

        .catch(reason => { 

          // 假设张三不借,并丢给我一个理由 

          // 试着向李四借 

          tryBorrowMoneyFromLisi() 

            .then(transferMoneyToHome) 

            .catch(reason2 => { 

              // 假设 李四也不肯错 

              // 再试试向王五借 

              tryBorrowMoneyFromWangwu() 

                .then(transferMoneyToHome) 

                .catch(reason => { 

                  // 没有人肯借 

                  throw new Error("我该怎样办呢?"); 

                }); 

            }); 

        }); 

    (责任编辑:admin)