JS备忘

1. Promise用法

js异步调用较多,如果某个操作是基于上个异步结果才能执行的,再有一个操作又是基于此操作的,则需要嵌套多层代码,在ES6中引入了Promise写法,可以比较优雅的解决这个问题:

    <script type="text/javascript">
        function runAsync1(para) {
            var p = new Promise(function (resolve, reject) {
                //做一些异步操作
                setTimeout(function () {
                    console.log(‘异步任务1执行完成‘);
                    resolve(para + 1);
                }, 1000);
            });
            return p;
        }
        function runAsync2(para) {
            var p = new Promise(function (resolve, reject) {
                //做一些异步操作
                setTimeout(function () {
                    console.log(‘异步任务2执行完成‘);
                    resolve(para + 2);
                }, 2000);
            });
            return p;
        }
        function runAsync3(para) {
            var p = new Promise(function (resolve, reject) {
                //做一些异步操作
                setTimeout(function () {
                    console.log(‘异步任务3执行完成‘);
                    resolve(para + 3);
                }, 2000);
            });
            return p;
        }

        runAsync1(1)
        .then(function (data1) {
            console.log(data1);
            return runAsync2(data1);
        })
        .then(function (data2) {
            console.log(data2);
            return runAsync3(data2);
        })
        .then(function (data3) {
            console.log(data3);
        });

    </script>

输出的结果是:

异步任务1执行完成
2
异步任务2执行完成
4
异步任务3执行完成
7

只需要看最后几行就可以,第一个then接收runAsync1的返回值data1可以将其传递给第二个操作,第二个then接收runAsync2的返回值data2将其当做参数传递给第三个操作。

时间: 2024-08-07 16:47:47

JS备忘的相关文章

20160419&mdash;JS备忘:服务器回发刷新页面提示重试的解决方案。

有事页面刷新时 提示如下: js使用的是:location.reload()的刷新方式. 使用js重新定向该页面:location.href="a.aspx"; 当使用:self.opener.location.href="a.aspx"; self.opener是指由哪个页面跳转到本页面. 在多个页面跳转到同一个页面时,由于不确定是哪一个页面而无法使用定向跳转页面. 使用如下JS代码解决: var str = self.opener.location.pathna

JS备忘--子父页面获取元素属性、显示时间

//页面加载完成后执行 $(function () { getHW();}); //当用户改变浏览器大小改变时触发 $(window).resize(function () { setHW(); }); //每500毫秒运行一次 window.setInterval("getH()", 500); //获取页面的高度,并传给父页面的元素 function getSubPageH() { var parentWorkDiv = $("#workDiv", parent

js 备忘

jquery的post方法,对于输出的数据容易解析出错,解析时用eval函数可以避免此错误 var myObj=eval("("+k+")"); 一.实例: <script> $(document).ready(function(){ $(".xx").click(function(){ var id = $(this).attr("id"); var stype = $(this).attr("styp

P2.JS之触碰材质(ContactMaterial)备忘

关键代码: 1 boxShape.material = new p2.Material(); 2 platformShape.material = new p2.Material(); 3 4 var material = new p2.ContactMaterial(boxShape.material, platformShape.material, { 5 surfaceVelocity: -50, 6 restitution: 0.5, 7 friction: 0.3, 8 stiffne

P2.JS之距离约束(DistanceConstraint)备忘

关键代码: 1 //以下是地面和墙壁的代码 2 //下 3 var body = new p2.Body({ mass: 0, position: [0, -5]}); 4 var shape = new p2.Plane(); 5 body.addShape(shape); 6 world.addBody(body); 7 8 //右 9 body = new p2.Body({ angle: Math.PI / 2, mass: 0, position: [10, 0]}); 10 body

ajax调用本页js【备忘】

备忘

Express模版引擎hbs备忘

最近几天折腾了下express,想找个合适的模版引擎,下面是一些折腾过程的备忘 选择标准 选择一门模版语言时,可能会考虑的几点 语法友好(micro tmpl那种语法真是够了) 支持模版嵌套(子模版的概念) 支持模版继承(extend) 前后端共用 有容错处理(最好定位到具体出错位置) 支持预编译(性能好) 注意到hbs,似乎满足大部分的需求:https://github.com/donpark/hbs getting started demo地址:https://github.com/chyi

移动端开发备忘

这是一些移动端开发的备忘记录. <meta> 元素 <meta name=“viewport” content=“width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no”/> width:宽度(数值 / device-width)(范围从200 到10,000,默认为980 像素) height:高度(数值 / device-height)(范围从223 到10,000) initial-s

JqGrid相关操作备忘 方法列表

JqGrid相关操作备忘 方法列表 1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选