用Promise模拟下单操作的流程

简介: 用Promise模拟下单操作的流程

文章目录

1.Promise概念

Promise可以优雅的处理一个比较复杂的流程,本文以支付下订单为例,Promise来处理相对比较复杂的流程。

2.下单的时序图

6c01dcd6f591465ab159f41908e1ceb0.png

3.Promise代码

<script>

        //promise的用法

  /// 模拟本地下单流程,本地创建订单---->订单支付---->支付成功更新订单状态---返回成功,支付失败--->更新改状态

        /// 创建订单

  function makeOrder(orderId){

   return new Promise(function(resove,reject){

    console.log("创建本地订单"+orderId);

    var i = 6 ;

    if(i > 5){

     resove(orderId)

    }else{

     reject("错误"+orderId)

    }

   });

  }

  //更新订单状态

  function updateOrderStatus(orderId,OrderStatus){

   return new Promise(function(resove,reject){

    console.log("支付成功更新支付状态"+orderId);

    var i = Math.floor(Math.random()*10+1);

    if(i > 5){

     resove(orderId);

    }else{

     reject("错误"+orderId);

    }

   });

  }

  //调用支付系统进行支付

  function toPayOrder(params){

      return new Promise(function(resove,reject){

       console.log("调用支付系统进行支付"+params);

       var i = Math.floor(Math.random()*10+1);

       if(i > 5){

        resove(orderId);

       }else{

        reject("错误"+orderId);

       }

      });

  }

  //退费,取消支付

  function toQuitOrder(params){

      return new Promise(function(resove,reject){

       console.log("失败进行退费"+params);

       var i = Math.floor(Math.random()*10+1);

       if(i > 5){

        resove(orderId);

       }else{

        reject("错误"+orderId);

       }

      });

  }

  var orderId = "1112121221";

  makeOrder(orderId).then(function(orderId){

    return toPayOrder(orderId);

  }).then(function(orderid){

    return updateOrderStatus(orderId);

  }).catch(function (paysuccFlag,reason) {

   //支付成功本地更新失败

   //调用回退接口

   if(paysuccFlag){

     toQuitOrder("退订单")

   }

           console.log('失败:' + reason);

       });

   </script>

相关文章
|
存储 JavaScript 前端开发
【javascript】Promise/A+ 规范简单实现 异步流程控制思想
——基于es6:Promise/A+ 规范简单实现 异步流程控制思想  前言:   nodejs强大的异步处理能力使得它在服务器端大放异彩,基于它的应用不断的增加,但是异步随之带来的嵌套、难以理解的代码让nodejs看起来并没有那么优雅,显得臃肿。
1006 0
|
JavaScript 前端开发 API
微信小程序中使用Promise进行异步流程处理
【更新说明】 由于微信开发者工具和微信真机环境的不断升级,小程序中要使用Promise的话,已经不需要像文中描述的再引入第三方库如bluebird或es6-promise了,可直接使用。
1759 0
|
7月前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
73 1
|
7月前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
110 4
|
7月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。
|
6月前
|
前端开发 JavaScript 开发者
JavaScript进阶-Promise与异步编程
【6月更文挑战第20天】JavaScript的Promise简化了异步操作,从ES6开始成为标准。Promise有三种状态:pending、fulfilled和rejected。基本用法涉及构造函数和`.then`处理结果,如: ```javascript new Promise((resolve, reject) =&gt; { setTimeout(resolve, 2000, &#39;成功&#39;); }).then(console.log); // 输出: 成功
101 4
|
7月前
|
JSON 前端开发 JavaScript
【JavaScript技术专栏】JavaScript异步编程:Promise、async/await解析
【4月更文挑战第30天】JavaScript中的异步编程通过Promise和async/await来解决回调地狱问题。Promise代表可能完成或拒绝的异步操作,有pending、fulfilled和rejected三种状态。它支持链式调用和Promise.all()、Promise.race()等方法。async/await是ES8引入的语法糖,允许异步代码以同步风格编写,提高可读性和可维护性。两者结合使用能更高效地处理非阻塞操作。
118 0
|
5月前
|
前端开发 JavaScript
JavaScript异步编程:Promise与async/await的深入探索
【7月更文挑战第9天】Promise和async/await是JavaScript中处理异步编程的两大利器。Promise为异步操作提供了统一的接口和链式调用的能力,而async/await则在此基础上进一步简化了异步代码的书写和阅读。掌握它们,将使我们能够更加高效地编写出清晰、健壮的异步JavaScript代码。
|
5月前
|
前端开发 JavaScript 定位技术
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
87 1
|
6月前
|
前端开发 JavaScript
Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。
【6月更文挑战第27天】Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。它避免了回调地狱,通过链式调用`.then()`和`.catch()`使异步流程清晰。
55 2