首页 > 代码库 > JS备忘

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将其当做参数传递给第三个操作。

 

JS备忘