用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看起来并没有那么优雅,显得臃肿。
954 0
|
JavaScript 前端开发 API
微信小程序中使用Promise进行异步流程处理
【更新说明】 由于微信开发者工具和微信真机环境的不断升级,小程序中要使用Promise的话,已经不需要像文中描述的再引入第三方库如bluebird或es6-promise了,可直接使用。
1680 0
|
1月前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
25 1
|
1月前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
35 4
|
1月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。
|
9天前
|
前端开发 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); // 输出: 成功
|
1月前
|
JSON 前端开发 JavaScript
【JavaScript技术专栏】JavaScript异步编程:Promise、async/await解析
【4月更文挑战第30天】JavaScript中的异步编程通过Promise和async/await来解决回调地狱问题。Promise代表可能完成或拒绝的异步操作,有pending、fulfilled和rejected三种状态。它支持链式调用和Promise.all()、Promise.race()等方法。async/await是ES8引入的语法糖,允许异步代码以同步风格编写,提高可读性和可维护性。两者结合使用能更高效地处理非阻塞操作。
|
2天前
|
前端开发 JavaScript
Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。
【6月更文挑战第27天】Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。它避免了回调地狱,通过链式调用`.then()`和`.catch()`使异步流程清晰。
7 2
|
7天前
|
前端开发 JavaScript
JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。
【6月更文挑战第22天】JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。回调是基础,用于在操作完成后执行函数;Promise管理异步状态,支持链式调用;async/await提供同步代码外观,简化错误处理。每种技术在处理耗时任务时都起着关键作用。
13 3
|
12天前
|
前端开发 JavaScript 开发者
JavaScript中的异步编程:Promise与Async/Await
在现代前端开发中,JavaScript的异步编程变得越来越重要。本文将深入探讨JavaScript中的两种常见异步编程方式:Promise和Async/Await,并比较它们之间的优劣势,帮助读者更好地理解和运用这些技术。